2

J'ai une application rails. J'ai un problème étrange dans la forme d'enregistrementrails forts paramètres ne fonctionnent pas correctement

ceci est mon modèle de billet.

class Ticket < ApplicationRecord 
    belongs_to :user 
    has_many :ticketissues , inverse_of: :ticket 

    accepts_nested_attributes_for :ticketissues, :reject_if => lambda { |a| a[:body].blank? } 

end 

c'est le modèle ticketisue

class Ticketissue < ApplicationRecord 

     belongs_to :user 
     belongs_to :ticket 

    validates :body, presence: true 
    end 

this is ticket controller 

class TicketsController < ApplicationController 
    before_action :set_ticket, only: [:show, :edit, :update, :destroy] 

    # GET /tickets 
    # GET /tickets.json 
    def index 
    @tickets = Ticket.all 
    end 

    # GET /tickets/1 
    # GET /tickets/1.json 
    def show 
    end 

    # GET /tickets/new 
    def new 
    @ticket = Ticket.new 
    end 

    # GET /tickets/1/edit 
    def edit 
    end 

    # POST /tickets 
    # POST /tickets.json 
    def create 
    @ticket = Ticket.new(ticket_params) 
    @ticket.user_id = current_user.id 
    @ticket.ticketissues.build 

    respond_to do |format| 
     if @ticket.save 
     format.html { redirect_to @ticket, notice: 'Ticket was successfully created.' } 
     format.json { render :show, status: :created, location: @ticket } 
     else 
     format.html { render :new } 
     format.json { render json: @ticket.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /tickets/1 
    # PATCH/PUT /tickets/1.json 
    def update 
    respond_to do |format| 
     if @ticket.update(ticket_params) 
     format.html { redirect_to @ticket, notice: 'Ticket was successfully updated.' } 
     format.json { render :show, status: :ok, location: @ticket } 
     else 
     format.html { render :edit } 
     format.json { render json: @ticket.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /tickets/1 
    # DELETE /tickets/1.json 
    def destroy 
    @ticket.destroy 
    respond_to do |format| 
     format.html { redirect_to tickets_url, notice: 'Ticket was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_ticket 
     @ticket = Ticket.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def ticket_params 
     params.require(:ticket).permit(:subject, :subsubject, :user_id, ticketissues_attributes: [ 
     :body, :id, :_destroy]) 
     #params.require(:ticket).permit! 
    end 
end 

et moi est comme ce

<%= f.input :subject , collection: [ "تغییر اطلاعات کسب و کار", 
            "تغییر اطلاعات یک کوپن", 
            "سایر موارد"] %> 

    <%= f.input :subsubject %> 
    <!-- <%= f.association :user %> --> 
    </div> 

     <%= f.simple_fields_for :ticketissue do |p| %> 
     <%= p.input :body %> 
     <% end %> 

    <div class="form-actions"> 
    <%= f.button :submit %> 
    </div> 
<% end %> 

mais quand je veux créer un billet, la forme ne sera pas enregistrer dans la base de données et je reçois cette erreur:

POST Started "/ billets" pour 127.0.0.1 à 2017-04-11 23:52:33 +0430

Processing by TicketsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"fsl6nTe0PjmBKpeuh16BRFlYOw0MB93LEYDVEAl6TtT/uu/LwGTA0P2q0bRxIxBUqHqZINXHntrZLt7MuCG84Q==", "ticket"=>{"subject"=>"تغییر اطلاعات کسب و کار", "subsubject"=>"lk", "ticketissue"=>{"body"=>"lkjkjkjkjkkjkj"}}, "commit"=>"Create Ticket"} 
Unpermitted parameter: ticketissue 

mais quand j'utiliser la console et cette commande:

Ticket.create(subject: 'test' , subsubject: 'ticket test' , ticketissues_attributes: [{body: "[some thing" }]) 

toutes choses fonctionnent et toutes les amendes sauvegarde des données.

réservoirs pour lire et aider.

+0

Changer votre forte param de ticketissues_attributes: à ticket_issue: – bkunzi01

Répondre

3

Vous devez utiliser le pluriel ici

= f.simple_fields_for :ticketissues do |p| 
+0

Je l'ai fait avant, mais je ne sais pas pourquoi quand je l'utilise: ticketissues zone du corps entier (déposée) disparaître. et la forme rappellent seulement le sujet et le subsubject (aucune zone de texte de corps). – Armanlearn

+0

C'est probablement parce que '@ ticket.ticketissues' est' nil' et donc aucun problème n'est rendu. Utilisez-vous ceci dans 'new' ou' edit'? – Iceman