Tôi mới tham gia ROR nhưng đã quyết định tôi cũng có thể tìm hiểu về 4. Điều này có thể hoặc không có ý kiến hay. Tôi đang cố gắng để tạo ra một hình thức bằng cách sử dụng thuộc tính lồng nhau và tôi đang đấu tranh.Rails 4 Các thuộc tính lồng nhau Các tham số chưa được đính kèm
Tôi đã xem xét đường ray này http://railscasts.com/episodes/196-nested-model-form-part-1 và tôi đang cố gắng tạo lại một tình huống tương tự trên của riêng tôi.
Tôi có một đối tượng Bill có nhiều đối tượng Do. Đối tượng Do cũng thuộc về một số Person. Tôi muốn một hình thức mà tôi có thể tạo ra Bill và các con của nó Dues tất cả trong một trang.
Các trường phù hợp được hiển thị trên trang (mặc dù chưa có trình đơn thả xuống cho Người) và gửi thành công. Tuy nhiên, không ai trong số các dues trẻ em được lưu vào cơ sở dữ liệu và lỗi được ném trong nhật ký máy chủ:
Unpermitted parameters: dues_attributes
Có sự một số loại thay đổi trong Rails 4, hay tôi chỉ còn thiếu một cái gì đó hoàn toàn.
Ngay trước khi lỗi, nhật ký hiển thị 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"}
mã có liên quan được liệt kê dưới đây
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
bills_controller.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>
UPDATE để bills_controller.rb: này hoạt động!
def bill_params
params.require(:bill).permit(:company, :month, :year,
dues_attributes: [:amount,
:person_id])
end
Fix trên định dạng: params.require (: hóa đơn).giấy phép (: công ty,: tháng,: năm,: dues_attributes => [: số tiền,: person_id]) –