pre*_*yce 1 ruby activerecord ruby-on-rails
我对rails非常陌生.我试图找出在两个模型之间创建关系的最有效方法:
这就是我在想的事情.是否有意义 ?
class User < ActiveRecord::Base
has_many :songs #songs this user has favorited
end
class Song < ActiveRecord::Base
belongs_to :user #the user whom submitted this song
end
Run Code Online (Sandbox Code Playgroud)
我对这种方法的关注是,我不确定对数据库中每首歌进行查询的效率,只是为了弄清楚特定用户拥有哪些歌曲.有没有不同的方式我应该考虑这个?
顺便说一下,有没有一种方法可以调用属性,而不是它的模型名称.因此,即使模型仍然是"歌曲",User.find(1).songs[0]我也不能说User.find(1).favorites[0].
用户和乐曲模型之间需要2个独立的关系.也就是说,您需要一个"所有者"关系和一个"最喜欢"的关系."所有者"关系可以是一个简单的has_many/belongs_to,就像现在一样.在"最喜欢"的关系是多到多,将需要使用,也可以作为一个连接表habtm的表或与第一类模型has_many through作为解释的关系在这里.
一般推荐的方法是使用has_many through它,因为它可以让你更好地控制:
class User
has_many :songs # these are songs 'owned' by the user
has_many :user_favorite_songs
has_many :favorite_songs, :through => :user_favorite_songs # these are the favorites
end
class Song
belongs_to :user
has_many :user_favorite_songs
end
class UserFavoriteSong
belongs_to :user
belongs_to :favorite_song, :class_name => 'Song', :foreign_key => :song_id
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2105 次 |
| 最近记录: |