0

我有两个模型 - 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 作为复选框标签。文档让我有点困惑。

我怎样才能让它与f.check_box.

谢谢。

4

2 回答 2

0

代码让我感到困惑。@topics包含什么?如果它是一个集合,Topic那么为什么您要直接访问Topic视图中的模型?这将是:

@topics.each.do

而不是你

Topic.all.each

此外,您正在使用 @topics 作为循环内的集合。check_box 如何从集合中生成复选框?

请看以下几点:

  1. 接受_nested_attributes_for。除了客户端has_many主题关联之外,您还需要在客户端模型中进行设置
  2. fields_for否则,rails 将不知道您要从同一表单更新主题模型。
  3. 查看此截屏视频以了解如何使其工作
于 2012-10-08T06:30:23.217 回答
0

无论出于何种原因,form助手都不能与check_box.

所以,这是有效的代码:

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

根据类似问题的其他答案,助手f.check_box是模型绑定的,并且提供给复选框的值是表单上模型的隐含值。问题是,我不知道如何获得 form_helper 的隐含值来生成正确的标签 - 即client[topic_ids][],所以我不得不求助于check_box_tag.

于 2012-10-08T07:08:07.090 回答