2012-10-08 33 views
0

我有兩個模型 - Client & Topic,它們之間有一個HABTM關係。什麼是check_box表單助手的正確使用?

我試圖在客戶端form部分生成一系列主題複選框。

這是我在做什麼:

<% Topic.all.each do |topic| %> 
    <% checked = @client.topics.include?(topic) %> 
    <%= f.label(:name, topic.name) %> <%= f.check_box @topics, topic.id %> 
<% end %> 

這是錯誤我得到:

undefined method `merge' for 1:Fixnum 

我知道一個解決方案是使用,但是這迫使我做記錄更新手動關聯。

所以我寧願使用form_helper作爲複選框標記。 The docs對我來說有點困惑。

我如何得到這個與f.check_box一起使用。

謝謝。

回答

0

無論出於何種原因,form助手不check_box工作。

所以,這是工作的代碼:

<%= check_box_tag "client[topic_ids][]", topic.id, checked %> 

根據other answers類似的問題,助手f.check_box是模型約束,並提供給複選框的值是從窗體上的模型隱含的。問題是,我不知道如何獲得form_helper的隱式值來生成正確的標記 - 即client[topic_ids][],所以我不得不求助於。

0

該代碼令我困惑。 @topics包含什麼?如果它是Topic的集合,那麼爲什麼你直接在視圖中訪問Topic模型?這將是:

@topics.each.do 

,而不是你

Topic.all.each 

此外,您使用的@topics作爲集合的循環中。 check_box如何從集合中生成複選框?

請看看以下的事情:

  1. accepts_nested_attributes_for。除了客戶端之外,您還需要在客戶端模型中設置此項has_many主題協會
  2. fields_for否則,rails將不會有任何想法可以從此相同表單更新主題模型。
  3. 檢查this screencasts得到一個想法,你如何使它工作
+0

即使我將複選框助手更改爲:'f.checkbox topic,topic.id' - 其中局部變量是'topic',它仍然會給我那個Fixnum錯誤。我錯過了什麼? – marcamillion

+0

此外問題不在於該屬性是否可訪問。它是。例如,我可以通過命令行訪問屬性。我只是不知道如何使用'f.check_box'來做到這一點。 – marcamillion

+0

如果你閱讀了我給出的鏈接,你會得到更好的主意。特別是如果你檢查屏幕錄像。 – HungryCoder

相關問題