0

この画像に表示されているコードを含む、RubyonRailsを使用したサービス指向設計を読んでいます。

ここに画像の説明を入力してください

私の質問は、特にユーザーモデルからのこの行についてです

has_many :followers, :through -> :followings, :source => :user

ここで、ユーザー(ユーザーモデルのインスタンスのように)has_many:followersは、実際には他のユーザーです。したがって、ユーザーhas_manyusers。これは、ユーザーhas_many:usersを書くときに何かが壊れるかのように、私には非常に奇妙に思えます。したがって、doign has_many:followers ...:source =>:userは、物事が壊れないようにすることを意図しているのではないかと思いました。

このSOの質問に対する1つの回答によると、Has_manyアソシエーションの:sourceメソッドに関するRailsのhas_one / has_manyの:sourceオプションを理解するための助けが必要です。:sourceを使用する理由の1つは、次のように見えるコードを取得することです。

class Newsletter
  has_many :subscriptions
  has_many :users, :through => :subscriptions
end

これに変更します

  class Newsletter
    has_many :subscriptions
    has_many :subscribers, :through => :subscriptions, :source => :user
   end

これを行う代わりに

  Newsletter.find(id).users

1つははるかに論理的です(ニュースレターにはユーザーではなくサブスクライバーがいるため)

   Newsletter.find(id).subscribers

したがって、本からコードに戻ると、私の質問は、ユーザーモデルでこれを行う唯一の理由です。

 has_many :followers, :through -> :followings, :source => :user

より読みやすいコードを作成するにはUser.find(id).followers?そうでなければ問題はありません

User.rb 

has_many :users

Railsでそれができる場合(つまり、アプリケーションが壊れない場合)、belongs_toをどこに配置しますか?

User.rb
has_many :users
belongs_to :user

これは私には非常に奇妙に思えますが、:sourceがより明確なクエリを記述できるようにするためだけにある場合、このコードは引き続き機能しますか?

更新:質問のポイントは、誰かがこれを行うのを妨げるものはありますか?

 User.rb
    has_many :users
    belongs_to :user
4

1 に答える 1

0

あなたは正しいです、あなたはソースを必要としません、それはあなたがthroughパラメータを削除しているからです

ユーザーは5人のユーザーを持っていません

ユーザーには多くのフォロワーがいますが、それぞれにユーザーがいるため、次のものが必要です。

class User < ActiveRecord::Base
  has_many :followings
  has_many :users, :through => :followings
end

詳細はこちら:

http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

于 2013-03-18T10:50:57.933 に答える