2014-09-20 35 views
0

我在軌道上4.如何列出要在第二個模型中選擇的一個模型的所有記錄?

我有一個模型features有一個只能由我創建的記錄列表。我有另一個型號houses,用戶可以創建。

我想列出所有的features爲新的house的形式複選框,以便用戶可以選擇他們想要附加到他們的house。我也有一個連接模型house_features,將兩者聯繫起來,因爲許多houses可以有許多不同的features

house型號:

has_many :house_features, dependent: :destroy 
has_many :features, through: :house_features 
accepts_nested_attributes_for :house_features 

feature型號:

has_many :house_features 
has_many :houses, through: :house_features 

house_feature型號:

belongs_to :house 
belongs_to :feature 

在我的新house形式我有

<%= form_for @house do |f| %> 
<% Features.all.each do |feature| %> 
    <%= f.fields_for :house_features do |h| %> 
    <%= h.label :feature_id, feature.name %> 
    <%= h.check_box :feature_id, {}, feature.id %> 
    <% end %> 
<% end %> 
<% end %> 

在我houses控制器我有我的新動作@house.house_features.build,我必須設置爲'house_features_attributes的house_params:[:ID,:house_id,:FEATURE_ID]

現在,新house頁面上,該顯示feature記錄複選框列表。如果我選擇一些並提交表單,然後返回編輯房屋,我最終會爲每個feature列出一些額外的複選框,並且複選框的數量與我在創建時選擇的功能數量相對應。

這是怎麼發生的?我應該做/改變來解決這個問題嗎?

我希望我的用戶能夠編輯他們的房屋並添加或刪除功能。

感謝

回答

0

看來你有多餘的循環:

<%= f.fields_for :house_features do |h| %> 

你應該重寫你的循環使用僅選擇此house一個循環,並選擇複選框:

<%= form_for @house do |f| %> 
    <% Features.all.each do |feature| %> 
    <%= h.label :feature_id, feature.name %> 
    <%= h.check_box :feature_id, {checked: @house.house_features.include?(feature)}, feature.id %> 
    <% end %> 
<% end %> 
+0

感謝響應,這會使編輯頁面上的多個複選框問題消失,但是,由於不會創建house_feature記錄,因此不會保存任何內容。 – oobie11 2014-09-21 00:59:50

相關問題