ruby-on-rails - 如何使用 Rails 4 以一种形式添加多个多对多字段?

标签 ruby-on-rails ruby forms has-and-belongs-to-many

我有一个具有以下关联的表单:

Course.rb

has_and_belongs_to_many :skills

技能.rb

has_and_belongs_to_many :courses

我想做的是允许想要添加新类(class) 的人从他选择的类别中选择所有技能,并能够通过使用复选框来添加它们。在我看来,我是这样做的:

查看

<%= form_for(@course) do |f| %>
  <% @skills.each do |s| %>
    <%= f.check_box :value => s.id %> <%= s.title %><br />
  <% end %>
<% end %>

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

undefined method `{:value=>9}' for #<Course:0x00000004ce0208>

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

谢谢。

最佳答案

Rails 4 中现在有一个很棒的 collection_check_boxes表单辅助方法。

来自Rails API docs :

<%= 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 最酷的地方在于它是可选的[占用一个 block ]( 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

关于ruby-on-rails - 如何使用 Rails 4 以一种形式添加多个多对多字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23814740/

相关文章:

jquery - Ruby on Rails : Delete confirmation pop-up dialog displaying twice

arrays - 删除存在于另一个数组中的数组元素

ruby - 在 watir-webdriver 和 phantomjs 中设置 "Accept-Language" header

ruby - 如何在公司代理后面的 Mac 上安装 Ruby gems?

mysql - 呈现 :edit causes form URL to change/fail after update

jquery - 我无法从 jquery 编辑和提交表单

Javascript 包与另一种语言的包装器

ruby-on-rails - Rails 4.0 运行时错误 : @controller is nil: make sure you set it in your test's setup method

ruby-on-rails - 为什么不能在其中分配值或在 rspec 上分配特殊 block

javascript - 触发单选按钮单击并设置选中的属性问题