我正在阅读使用Ruby on Rails的面向服务的设计,其中包含您在此图像中看到的代码
我的问题是关于用户模型中的这一行
has_many :followers, :through -> :followings, :source => :user
其中用户(在用户模型的实例中)has_many:关注者,实际上只是其他用户。因此用户拥有多个用户。对我来说这似乎很奇怪,一个用户has_many:用户,好像什么东西应该在你写这个时打破,所以我想doign has_many:followers ...:source => :用户可能意味着阻止事情破裂。
根据关于这个问题Need help to understand :source option of has_one/has_many through of Rails的一个答案,这是关于:has_many关联的源方法,使用的一个基本原理:source是采用看起来这样的代码
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
一个人会更合乎逻辑(因为新闻通讯的订阅者不是用户)
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
答案 0 :(得分:0)
你是对的,你不需要源,因为你要删除通过参数
用户没有可能的用户
用户有许多关注者,每个人都有一个用户需要:
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