has_and_belongs_to_many为什么我想让其他模型的attr_accessible?

时间:2012-12-30 12:11:03

标签: ruby-on-rails associations

如果我有两个模型:体验和类别,它们是多对多的关联,如下所示:

class Experience < ActiveRecord::Base
  has_and_belongs_to_many :categories
end


class Category < ActiveRecord::Base
  has_and_belongs_to_many :experiences
end

为什么有时人们会添加:

体验模型中的

attr_accessible :category_ids?我发现自己必须这样做,所以在Rails admin gem中我可以为特定体验添加类别,但我不明白为什么。

1 个答案:

答案 0 :(得分:3)

如果您在体验和类别之间设置HABTM关系,除了其他方面,您还有可用的方法Experience#category_ids。此方法返回当前经验所具有的各个类别ID。

Experience.first.category_ids

现在此方法还有Experience#category_ids=变体,因此您可以使用它来分配类别ID:

Experience.first.category_ids = [1, 2, 3]

现在,当您有一个表单让您为体验选择类别时,您只拥有所选类别的ID。当您提交表单时,这些ID会通过批量转换传递给Experience#category_ids=,如果您在category_ids中没有attr_accessible,则会收到错误。