0

2つのモデル(レール2.3.8):

ユーザー; ユーザー名と無効なプロパティ; ユーザーhas_one:profileプロファイル; フルネームと非表示のプロパティ

disable=1およびhidden=1のユーザープロファイルを削除するnamed_scopeを作成しようとしています。さらに、ユーザーモデルは通常プロファイルモデルと組み合わせて使用​​されますが、:include =>:profile構文を使用してこれを指定できる柔軟性が必要です。

次のユーザーnamed_scopeがあります。

  named_scope :visible, {
    :joins => "INNER JOIN profiles ON users.id=profiles.user_id",
    :conditions => ["users.disabled = ? AND profiles.hidden = ?", false, false]
  }

これは、ユーザーモデルを参照するだけで期待どおりに機能します。

>> User.visible.map(&:username).flatten
=> ["user a", "user b", "user c", "user d"]

ただし、プロファイルモデルを含めようとすると、次のようになります。

User.visible(:include=> :profiles).profile.map(&:full_name).flatten

次のようなエラーが発生します。

NoMethodError: undefined method `profile' for #<User:0x1030bc828>

この方法でモデルコレクションの境界を越えることはできますか?

4

1 に答える 1

0

user'にアクセスするには、次のprofileようなものを使用する必要があります

@user = User.visible(:include => :profiles)
@user.first.profile

または、あなたが望むものがすべてfull_namesである場合、私はあなたが次のようなことをすべきだと信じています

# untested
User.visible(:include=> :profiles).map(&:profile).collect{ |p| p.full_name }

しかし、おそらくもっと良い方法があります...それはきれいに見えません= P

于 2010-06-12T15:49:28.603 に答える