如何使用Rails 4在一个表单中添加多个多对多字段?

我有一个表格,有以下关联:

Course.rb

has_and_belongs_to_many :skills 

Skill.rb

 has_and_belongs_to_many :courses 

我想做的是允许想要添加新Course的人从他选择的类别中选择所有技能,并能够使用复选框添加它们。 在视图中,我这样做了:

视图

    s.id %> 

遗憾的是这不起作用,我收到以下错误:

 undefined method `{:value=>9}' for # 

你能帮我找到解决问题的方法吗?

谢谢。

Rails 4中 ,现在有一个很棒的collection_check_boxesforms的辅助方法。

Rails API文档

 <%= form_for @post do |f| %> <%= f.collection_check_boxes :author_ids, Author.all, :id, :name_with_initial %> <%= f.submit %> <% end %> 

在您的设置中,它可能是这样的:

 <%= form_for @course do |f| %> <%= f.collection_check_boxes :skill_ids, Skill.all, :id, :name %> <%= f.submit %> <% end %> 

关于collection_check_boxes的一个很酷的事情就是可选[带一个块]( http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_check_boxes ),让你自定义生成的标记(例如用于造型目的):

 collection_check_boxes(:post, :author_ids, Author.all, :id, :name_with_initial) do |b| b.label(:"data-value" => b.value) { b.check_box + b.text } end 

我认为你应该使用这段代码:

对于Rails 3. *

 <%= check_box_tag "course[skill_ids][]", s.id, s.title %> 

对于Rails 4. *如评论中所述,Rails 4引入了collection_check_boxes ,因此您的代码可能如下所示:

 <%= collection_check_boxes(:course, :skill_ids, Skills.all, :id, :title) %> 

请参阅check_box_tag文档: http ://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

如何在Rails中处理HABTM我推荐这个Railscast ,或者这里有代码。