この画像に表示されているコードを含む、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