0

私は初心者で、多くの投稿や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="}

何か案は?コントローラに何が欠けていますか?よろしくお願いします

4

2 に答える 2

0

新規/編集アクションで@hotel.facilityを作成します|| @ hotel.build_facility

于 2012-04-14T15:20:36.567 に答える
0

問題が解決しました。同じ問題を抱えている人へ:新しいコントローラーに追加:

@facility=@hotel.build_facility

@klump、正しい構文を試した後、その構文は正しくありませんでした:

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

ですから、私を正しい方向に向けてくれたアマールに感謝します。

于 2012-04-17T10:07:22.607 に答える