我有两个型号 - Client
& Topic
,它们之间有HABTM关系。
我正在尝试在客户端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
我知道一个解决方案是使用check_box_tag
,但这迫使我手动更新关联记录。
所以我宁愿使用form_helper作为checkbox标签。 The docs对我来说有点混乱。
如何使用此f.check_box
。
感谢。
答案 0 :(得分:0)
代码让我困惑。 @topics
包含哪些内容?如果它是Topic
的集合,那么为什么您在视图中直接访问Topic
模型?它将是:
@topics.each.do
而不是你
Topic.all.each
此外,您在循环中使用@topics作为集合。 check_box如何从集合中生成复选框?
请查看以下内容:
has_many
主题关联答案 1 :(得分:0)
无论出于何种原因,form
帮助程序都无法与check_box
一起使用。
所以,这是有效的代码:
<%= check_box_tag "client[topic_ids][]", topic.id, checked %>
根据other answers的类似问题,帮助器f.check_box
是模型绑定的,并且提供给复选框的值是隐含在表单上的模型中的。问题是,我无法弄清楚如何获取form_helper的隐含值来生成正确的标记 - 即client[topic_ids][]
,所以我不得不诉诸check_box_tag
。