我是一个新手,并搜查了许多文章和railscast教程和斜面仍然解决这个协会的事情Ruby on Rails的 - 协会发行:(
我有2个型号,一个酒店(脚手架创建)和设施
关键在于将设施与酒店相关联,但由于我的设施表具有布尔类型所需的所有列),因此该表中的一行将为一家酒店提供服务。
事情是,我不能让它显示,并保存/编辑/更新设施。创建模型设施时,我创建了一个hotel_id柱。 我的代码是:
型号:
class Facility < ActiveRecord::Base
belongs_to :hotel
attr_accessible :concierge, :hotel_id, :room24h
end
class Hotel < ActiveRecord::Base
has_one :facility, :dependent => :destroy
accepts_nested_attributes_for :facility, :allow_destroy => true
attr_accessible :name, :rating, :recommended, :facility_attributes
end
我在视图的形式是:
<%= form_for(@hotel) do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :rating %><br />
<%= f.number_field :rating %>
</div>
<div class="field">
<%= f.label :recommended %><br />
<%= f.check_box :recommended %>
</div>
<br />
Hotel Facilities
<%= f.fields_for :facility do |facility_fields| %>
<div class="field">
<%= facility_fields.label :room24h, "24h Room Service:" %>
<%= facility_fields.check_box :room24h %>
</div>
<div class="field">
<%= facility_fields.label "Concierge:" %>
<%= facility_fields.check_box :concierge %>
</div>
<%end%>
<div class="actions">
<%= f.submit %>
</div>
<%end%>
至于控制器,该hotels_controller是一样的,如果你刚刚做脚手架,我的facilities_controller是空的。
它现在显示设备的形式,但是当我点击“创建”并提交,我得到:
"Can't mass-assign protected attributes: @hotel"
和
app/controllers/hotels_controller.rb:46:in `new'
app/controllers/hotels_controller.rb:46:in `create'
为参数输入:
{"hotel"=>{"rating"=>"1",
"name"=>"aaa",
"recommended"=>"0",
"@hotel"=>{"room24h"=>"1",
"concierge"=>"1"}},
"commit"=>"Create Hotel",
"utf8"=>"✓",
"authenticity_token"=>"YU7KEJ8qz0iQcXPGkLP6BSJn7JL6df1HvuS5JnjK2eU="}
任何想法?控制器中缺少什么?再次提前致谢
尝试'<%= f.fields_for @ hotel.facility do | facility_fields | %>' – klump 2012-04-14 12:01:20
是否有你写街头英语的原因? DE =的? – Jonathan 2012-04-14 15:28:41
添加创建或保存新酒店到您的问题的控制器代码。 @Amar的回答是一个很好的猜测,但没有你的控制器代码,这只是一个猜测。 – mliebelt 2012-04-14 16:51:54