2012-04-14 116 views
0

我是一个新手,并搜查了许多文章和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="} 

任何想法?控制器中缺少什么?再次提前致谢

+0

尝试'<%= f.fields_for @ hotel.facility do | facility_fields | %>' – klump 2012-04-14 12:01:20

+0

是否有你写街头英语的原因? DE =的? – Jonathan 2012-04-14 15:28:41

+0

添加创建或保存新酒店到您的问题的控制器代码。 @Amar的回答是一个很好的猜测,但没有你的控制器代码,这只是一个猜测。 – mliebelt 2012-04-14 16:51:54

回答

0

在New/Edit action中创建@ hotel.facility || @ hotel.build_facility

0

问题解决了。任何人谁拥有了同样的问题:增加新的控制器:

@[email protected]_facility 

@klump,该语法是不正确的,想正确的一个后:

<%= f.fields_for :facility do |fc|%>

所以谢谢阿马尔,为了指引我朝着正确的方向。