我有3个型号:
User
,Artist
和Following
User - Artist
通过Following
进行多对多关联。
Following
表包含user_id
和artist_id
个字段。
如何设置此关联以便我可以使用:
User.find(123).followed_artists
Artist.find(234).followers
因为我迷失了所有这些参数,class_name,source,foreign_key。
答案 0 :(得分:6)
让我们说你有多次设置的磨机运行:
class User
has_many :followings
has_many :artists, through: :following
end
class Following
belongs_to :user
belongs_to :artist
end
class Artists
has_many :followings
has_many :users, through: :following
end
请耐心等待,到目前为止,ActiveRecord可以自行弄清楚只需通过演绎即可查找through
关系的目标。
如果我们想为artists
和users
关系使用不同的名称,我们只需告诉活动记录使用以下关联:
class User
has_many :followings
has_many :followed_artists, through: :following, source: :artist
end
class Following
belongs_to :user
belongs_to :artist
end
class Artists
has_many :followings
has_many :followers, through: :following, source: :user
end
只要ActiveRecord可以从连接表上的关系名称推断出它,我们就不必使用class_name
或foreign_key
选项。
但是,如果不是这种情况,则必须在连接表上指定它。让我们说一些赶时髦的人开始在你的应用程序中捣乱:
class Following
belongs_to :user, class_name: 'Persona', foreign_key: 'persona_id'
belongs_to :artist, class_name: 'Artiste', foreign_key: 'artiste_id'
end
如果连接模型的关系名称不是“常规”,则同样适用。
class User
has_many :artist_followings, class_name: 'Following'
has_many :followed_artists, through: :artist_followings,
source: :artist
end
class Following
belongs_to :user
belongs_to :artist
end