ActieRecord 生成_ids
所有人的 setter 和 getterhas_many http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many and has_and_belongs_to_many http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_and_belongs_to_many协会。
# creates 3 rows in products_types if they do not exist
# also deletes any rows not in the array
@product.update(type_ids: [1,2,3])
这些与一起使用表单选项助手 http://guides.rubyonrails.org/form_helpers.html#select-boxes-for-dealing-with-models分配关联:
<%= form_for(@product) do |f| %>
<div class="field">
<%= f.label :type_ids %>
<%= f.collection_select :type_ids, Type.all, :id, :name, multiple: true %>
</div>
...
<% end %>
要将参数列入白名单,请将其作为带有值的选项传递[]
它允许包含任何标量类型的数组。
def product_params
params.require(:product).permit(:name, :description, :image_dir_path, type_ids: [])
end
2)我如何获得插入到连接表中的记录?
随着has_and_belongs_to_many
关联,您只能间接插入/访问行。
例如通过:
@product.types
# or
@product.types << Type.first
# or
@product.types.create(name: 'Foo')
或者通过使用type_ids
前面提到过 setter/getter。这是与has_many through:
其中您有一个可以直接查询或创建的连接模型。