2

Ich habe eine Schienen App. Ich habe seltsames Problem beim Speichern des FormularsSchienen starke Parameter funktionieren nicht richtig

Dies ist mein Ticket-Modell.

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 

dieses ticketisue Modell ist

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 

und meiner Meinung nach ist wie dieser

<%= 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 %> 

, aber wenn ich ein Ticket erstellt werden soll, wird Form nicht in Datenbank speichern und ich bekomme diese Fehlermeldung:

Gestartet POST "/ Tickets" für 127.0.0.1 bei 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 

aber wenn ich verwende Konsole und diesen Befehl ein:

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

alle Dinge arbeiten Feinheiten und alle Daten speichern.

Tanks für lesen und helfen.

+0

Ihre starke param von ticketissues_attributes ändern: ticket_issue: – bkunzi01

Antwort

3

Sie müssen den Plural verwenden hier

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

ich tat es vor, aber ich weiß nicht, warum, wenn ich benutze: ticketissues Ganzkörperbereich (eingereicht) verschwinden. und Form erinnern mit nur Subjekt und Untersubjekt (kein Textbereich). – Armanlearn

+0

Das liegt wahrscheinlich daran, dass '@ ticket.ticketissues'' nil' ist und daher keine Probleme auftreten. Benutzt du das in 'new' oder' edit'? – Iceman