Tôi có một Bill
đối tượng, trong đó có nhiều Due
đối tượng. Đối Due
tượng cũng thuộc về a Person
. Tôi muốn một hình thức có thể tạo tất cả Bill
và con của nó Dues
trong một trang. Tôi đang cố gắng tạo một biểu mẫu bằng cách sử dụng các thuộc tính lồng nhau, tương tự như các thuộc tính trong Railscast này .
Mã liên quan được liệt kê dưới đây:
do.rb
class Due < ActiveRecord::Base
belongs_to :person
belongs_to :bill
end
hóa đơn
class Bill < ActiveRecord::Base
has_many :dues, :dependent => :destroy
accepts_nested_attributes_for :dues, :allow_destroy => true
end
bill_controll.rb
# GET /bills/new
def new
@bill = Bill.new
3.times { @bill.dues.build }
end
hóa đơn / _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 %>
hóa đơn / _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>
CẬP NHẬT để bill_controll.rb Điều này hoạt động!
def bill_params
params
.require(:bill)
.permit(:company, :month, :year, dues_attributes: [:amount, :person_id])
end
Các trường thích hợp được hiển thị trên trang (mặc dù chưa có danh sách thả xuống Person
) và gửi thành công. Tuy nhiên, không có khoản phí con nào được lưu vào cơ sở dữ liệu và một lỗi được đưa vào nhật ký máy chủ:
Unpermitted parameters: dues_attributes
Ngay trước khi xảy ra lỗi, nhật ký sẽ hiển thị điều này:
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"}
Đã có một số thay đổi trong Rails 4?