使用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)