私は初心者で、多くの投稿やrailscastチュートリアルを検索しましたが、それでもこの関連付けを回避することはできません。
ホテル(足場で作成)と施設の2つのモデルがあります。
ポイントは、施設をホテルに関連付けることですが、私の施設テーブルにはブール型で必要なすべての列があるため、そのテーブルの行は1つのホテルに対応します。
問題は、それを表示して、機能を保存/編集/更新することができないということです。モデルFacilityを作成するときに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%>
Controllersに関しては、hotels_controllerは、scaffoldを実行したばかりで、私のfacilitys_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="}
何か案は?コントローラに何が欠けていますか?よろしくお願いします