2017-08-09 3 views
0

Ich habe folgende Modelle zu:Rails 5 accept_nested_attributes von collection_select unpermited Parameter

class Receipt < ApplicationRecord 
    validates :name, presence: true 
    has_many :items, inverse_of: :receipt 
    accepts_nested_attributes_for :items 
end 

class Item < ApplicationRecord 
    validates :name, presence: true 
    belongs_to :receipt, inverse_of: :items 
    belongs_to :variant, inverse_of: :items 
end 

class Variant < ApplicationRecord 
    validates :name, presence: true 
    belongs_to :product, inverse_of: :variants 
    has_many :items, inverse_of: :variant 
end 

versucht simple_form zu verwenden, um einen neuen Eingang enthält Artikel einzureichen, die Auswahl von Varianten wie diese sind:

<%= simple_form_for @receipt do |f| %> 
    <div class="form-inputs"> 
     <%= f.input :name, label: 'Receipt Number', required: :true %> 
    </div> 
    <div class="form-inputs"> 
     <%= f.simple_fields_for :items do |builder| %> 
     <%= builder.collection_select(:variant, Variant.all, :id, :name, {prompt: 'Choose a Variant'}) %> 
     <% end %> 
    </div> 
    <br /> 
    <div class="form-actions"> 
     <%= f.button :submit, 'Save Receipt', class:"btn btn-primary" %> 
    </div> 
    <% end %> 

mit Controlleraktionen:

def new 
    @receipt = Receipt.new 
    @receipt.items.build 
    end 

def create 
    @receipt = Receipt.create(receipt_params) 
    puts receipt_params 
    if @receipt.valid? 
     redirect_to receipts_path 
    else 
     render :new, status: :unprocessable_entity 
    end 
    end 

    private 

    def receipt_params 
    params.require(:receipt).permit(:name, items_attributes: [:id, :name]) 
    end 

Ich kann auswählen t aus Varianten (in einer anderen Form und Aktion erstellt) im Formular für einen neuen Artikel, aber nach dem Einreichen werden weder der Beleg noch der Artikel gespeichert. Das Terminal liest unpermitted Parameter:

* Verarbeitung von ReceiptsController # erstellen, wie HTML Parameter: { "UTF-8" => "✓", "authenticity_token" => "tugJchKiHNKwQ53E/LGCJacbrqV86ydLHolRuaB9ngZJ4gQrodOLqrxki2fAwgEfpBkbbAOy2GtfHRjsqjWYyQ ==", "Quittung" => { "name" => "bhbh", "items_attributes" => { "0" => { "Variante" => "2"}}} "commit" => "Save Receipt"} Unzulässige Parameter: Variante (0,2ms) BEGIN (0,1 ms), ROLLBACK Unzulässige Parameter: Variante

Rendering-Quittungen/new.html.erb innerhalb Layouts/app lication Variante Laden (0.4ms) SELECT "Varianten". * FROM "Varianten" Gerenderte Quittungen/new.html.erb in Layouts/Applikation (18.2ms) Abgeschlossen 422 Unprocessable Entity in 473ms (Views: 465.0ms | Active: 0,8 ms) *

Antwort

1

Versuchen Sie es mit

<%= builder.collection_select(:variant_id, Variant.all, :id, :name, {prompt: 'Choose a Variant'}) %>

statt

<%= builder.collection_select(:variant, Variant.all, :id, :name, {prompt: 'Choose a Variant'}) %>

See, benutzte ich variant_id statt variant

Auch erlauben variant_id

def receipt_params 
    params.require(:receipt).permit(:name, items_attributes: [:id, :name, :variant_id]) 
end 
+1

Sie müssen auch auf die Whitelist 'variant_id' setzen – Pavan

+1

@Pavan - Danke für die Info. Ich habe vergessen, es in erlaubten Parametern hinzuzufügen. Die Antwort wurde aktualisiert. Dank mate :) –

+0

immer noch nicht funktioniert. ... "Quittung" => { "name" => "q1w2e3", "items_attributes" => { "0" => { "variant_ id" => "2"}}} "commit" =>“ Speicher Receipt "} (0,2 ms) BEGIN Variant Load (1,8 ms) SELECT "Varianten". * FROM "Varianten" WHERE "Varianten"." id "= $ 1 Grenzwert $ 2 [[ "id", 2], [" LIMIT "1]] (0,2 ms) ROLLBACK # Rendering Quittungen/new.html.erb innerhalb Layouts/Anwendung Variant Load (0.6ms) SELECT "Varianten" * FROM." „Varianten Rendered Quittungen/new.html.erb innerhalb Layouts/Anwendung (23.5ms) 422 Unprocessable Entity abgeschlossen .... –

Verwandte Themen