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) *
Sie müssen auch auf die Whitelist 'variant_id' setzen – Pavan
@Pavan - Danke für die Info. Ich habe vergessen, es in erlaubten Parametern hinzuzufügen. Die Antwort wurde aktualisiert. Dank mate :) –
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 .... –