Ruby 1.9.3 と ActiveRecord 3.2.6 を使用。
include?(object) を使用して関連付けられたオブジェクトの配列に含まれている attr_accessible :property が設定されている ActiveRecord オブジェクトを比較しようとすると、問題が発生します。
これらは私の 2 つの 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
次に、いくつかの役割(「管理者」と「編集者」など)を作成し、「管理者」をアカウントに割り当てると、これが機能すると想定します。
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
しかし、これは実際には false を返します!
Role モデルから「attr_accessible :title」を削除して上記を繰り返すと、true が返されます。
だから私の質問は...なぜattr_accessibleがこの特定の問題を引き起こすのでしょうか? または、ロールが account.roles に別の方法で存在するかどうかを確認するためにチェックを行う必要がある場合ですか?