1

Account、Member、Child の 3 つのモデルがあります。

Member belongs to Account
Child belongs to Member

メンバーには account_id 属性があります 子には account_id属性がありません

だから私はこれを行うことができます...

Member.where(:account_id => current_user.account.id)

c = Child.last
c.member.account_id

index アクションで、特定のアカウントに属するすべての子を一覧表示したいと考えています。テーブルに余分なaccount_id列を追加したくありませんでした。children

もちろん、私はこれを行うことはできません...

Child Model
def account_id
  self.member.account_id
end

Children Controller
Child.where(:account_id => current_user.account.id)

account_id属性を追加せずに、特定のアカウントに属するすべての子を一覧表示する方法はありますか?

ところで、私はこれを既存のクエリに持っています...

@children = Child.search(params[:search]).order(sort_column + ' ' + sort_direction).page(params[:page]).per(10)
4

2 に答える 2

1

Child クラスから始めて、次のように実行できます。

Child.includes(:member).where(:'members.account_id' => current_user.account.id)

これは、既存のクエリを変更するために使用できます。

于 2012-08-09T20:42:51.663 に答える
0
class Account < ActiveRecord::Base
  has_many :members
  #This is the line you were looking for
  has_many :children, :through => :members
end

class Member < ActiveRecord::Base
  belongs_to :account
  has_many :children, :class_name => "Child"
end

class Child < ActiveRecord::Base
  belongs_to :member
end

アカウントインスタンスがあると仮定すると、次の方法でそのすべての子にアクセスできます。

account.children

于 2012-08-09T20:36:32.560 に答える