0

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 に別の方法で存在するかどうかを確認するためにチェックを行う必要がある場合ですか?

4

1 に答える 1

3

あなたはそれを試すことができます

account.role_ids.include?(role.id)
于 2012-07-19T11:32:30.553 に答える