如果attr_accessible存在Ruby,则比较同一活动记录对象的两个实例将返回false



使用Ruby 1.9.3和ActiveRecord 3.2.6。

我在尝试比较一个设置了attr_accessible:property的ActiveRecord对象时遇到了一个问题,该对象包含在使用include?(对象)。

这是我的两个ActiveRecord模型,Account和Role。

账户:

class Account < ActiveRecord::Base
  # Associations
  #
  has_many :role_assignments, :dependent => :destroy
  has_many :roles, :through => :role_assignments
end

角色:

class Role < ActiveRecord::Base
  attr_accessible :title
  # Associations
  #
  has_many :role_assignments, :dependent => :destroy
  has_many :accounts, :through => :role_assignments
end

如果我创建了几个角色(比如"管理员"one_answers"编辑"),并将"管理员"分配给一个帐户,我认为这会起作用:

role = Role.find_by_title("Admin")
account = Account.first # => The Account we assigned the "Admin" role to
account.roles.include?(role) # => Should be true but returns false

但这实际上是假的!

如果我从角色模型中删除"attr_accessible:title"并重复上面的操作,那么它确实返回true。

所以我想我的问题是…为什么attr_accessible会导致这个特殊的问题?还是在这种情况下,我必须检查account.role中是否存在不同的角色?

你可以试试

account.role_ids.include?(role.id)

相关内容

  • 没有找到相关文章

最新更新