Rails 3 has_and_belongs_to_many在视图中创建复选框

den*_*min 2 ruby-on-rails associations

基于以下型号

class Company < ActiveRecord::Base
  has_and_belongs_to_many :origins
end

class Origin < ActiveRecord::Base
  has_and_belongs_to_many :companies
end
Run Code Online (Sandbox Code Playgroud)

我希望在我companies/_form的代表所有来源的复选框中有.

不知道Company.new(params[:company])in in是否companies_controller#create可以创建公司与所选起源之间的关联?

我正在运行rails 3.0.0,实现这一目标的最佳方法是什么?

感谢您的见解

Max*_*ams 9

habtm现在不是一个受欢迎的选择,最好使用has_many:通过相反的方式,在它们之间使用适当的连接模型.这将为您提供方法Company#origin_ids =,您可以从表单传递一组原始ID,以设置@company的所有关联起源.例如

<% current_origin_ids = @company.origin_ids %>
<% form_for @company do |f| %>
  <label>Name:<%= f.text_field :name %></label>
  <% Origin.all.each do |origin| %>
    <label><%= origin.name %>
      <%= check_box_tag "company[origin_ids][]", origin.id, current_origin_ids.include?(origin.id) %>
    </label>
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

另外,使用适当的连接模型和相应的控制器,您可以使用AJAX轻松添加/删除原点,使用对连接模型控制器的创建/删除调用.