Ich habe ein Bill
Objekt, das viele Due
Objekte hat. Das Due
Objekt gehört auch zu a Person
. Ich möchte ein Formular, mit dem das Bill
und seine untergeordneten Dues
Elemente auf einer Seite erstellt werden können. Ich versuche, ein Formular mit verschachtelten Attributen zu erstellen, ähnlich denen in diesem Railscast .
Der relevante Code ist unten aufgeführt:
due.rb
class Due < ActiveRecord::Base
belongs_to :person
belongs_to :bill
end
bill.rb
class Bill < ActiveRecord::Base
has_many :dues, :dependent => :destroy
accepts_nested_attributes_for :dues, :allow_destroy => true
end
bill_controller.rb
# GET /bills/new
def new
@bill = Bill.new
3.times { @bill.dues.build }
end
Rechnungen / _form.html.erb
<%= form_for(@bill) do |f| %>
<div class="field">
<%= f.label :company %><br />
<%= f.text_field :company %>
</div>
<div class="field">
<%= f.label :month %><br />
<%= f.text_field :month %>
</div>
<div class="field">
<%= f.label :year %><br />
<%= f.number_field :year %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<%= f.fields_for :dues do |builder| %>
<%= render 'due_fields', :f => builder %>
<% end %>
<% end %>
Rechnungen / _due_fields.html.erb
<div>
<%= f.label :amount, "Amount" %>
<%= f.text_field :amount %>
<br>
<%= f.label :person_id, "Renter" %>
<%= f.text_field :person_id %>
</div>
UPDATE to bill_controller.rb Das funktioniert!
def bill_params
params
.require(:bill)
.permit(:company, :month, :year, dues_attributes: [:amount, :person_id])
end
Die richtigen Felder werden auf der Seite gerendert (allerdings noch ohne Dropdown Person
) und das Senden ist erfolgreich. Es wird jedoch keine der untergeordneten Gebühren in der Datenbank gespeichert, und im Serverprotokoll wird ein Fehler ausgegeben:
Unpermitted parameters: dues_attributes
Kurz vor dem Fehler zeigt das Protokoll Folgendes an:
Started POST "/bills" for 127.0.0.1 at 2013-04-10 00:16:37 -0700
Processing by BillsController#create as HTML<br>
Parameters: {"utf8"=>"✓",
"authenticity_token"=>"ipxBOLOjx68fwvfmsMG3FecV/q/hPqUHsluBCPN2BeU=",
"bill"=>{"company"=>"Comcast", "month"=>"April ",
"year"=>"2013", "dues_attributes"=>{
"0"=>{"amount"=>"30", "person_id"=>"1"},
"1"=>{"amount"=>"30", "person_id"=>"2"},
"2"=>{"amount"=>"30", "person_id"=>"3"}}}, "commit"=>"Create Bill"}
Hat sich Rails 4 geändert?