如何使用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_boxes
forms的辅助方法。
从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 ,或者这里有代码。