0

私のプログラムには、階層構造のような 3 つのモデルがあります。

User (has_many :computers)
Computer (has_many :programs, belongs_to :user)
Programs (belongs_to :computer)

プログラム内で、ユーザーが拡張機能ごとに持っているプログラムの数を確認する必要があります。これは、 を介して非常に簡単に実行できますUser.computers.programs

has_many/belongs_toとはいえ、 と の間の関係UsersPrograms直接宣言することは何らかの形で有益でしょうか? 何らかの利点 (パフォーマンスまたはその他) がありますか?それとも、コードが複雑になるだけでしょうか?

4

3 に答える 3

1

それは、その関係に頻繁にアクセスする必要があると予測するかどうかに大きく依存します。その特定のクエリがなくてもできる場合は、

class User < ActiveRecord::Base
  has_many :computers
  has_many :programs, :through => :computers
end

そしてそれで終わります。同じことを行うコードが少ないほど、読みやすく、保守しやすくなります。

しかし、大規模なデータセットでその関係にアクセスする場合は、高価なJOINs を節約するという名前で説明した方法で、データを少し非正規化することで利益が得られる可能性があります。

于 2012-11-30T05:26:46.057 に答える
0

オプションがありthroughます:

has_many :programs, through: :computers

ここで詳細を読むことができます: http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

于 2012-11-30T05:24:18.390 に答える
0

あなたはこれを行うことができます:

class User < ActiveRecord::Base
  has_many :computers
  has_many :programs, :through => :computers
end

そうすれば、次のことができます:

user = User.first #find some user
user.programs #get a list of programs from the user through the computers they own
于 2012-11-30T05:24:37.293 に答える