【发布时间】:2009-11-05 22:55:44
【问题描述】:
我正在开发一个我继承的 Rails 网站,并试图解决一些次优模型行为。我有用户、歌曲和歌曲下载,每个都是自己的模型。
这是用户模型中的相关行:
has_and_belongs_to_many :downloaded_songs, :class_name => 'Song', :join_table => :song_downloads
来自歌曲模型:
has_and_belongs_to_many :downloaded_users, :class_name => 'User', :join_table => :song_downloads
来自 song_downloads 模型:
belongs_to :user
belongs_to :song
这是在用户下载歌曲时(在歌曲控制器中)创建新 song_download 记录的代码:
SongDownload.create( :song_id => @song.id,
:user_id => current_user.id,
:download_date => Date.today )
我遇到的问题是,一旦用户下载了一首歌曲,如果我尝试从交互式控制台调用下载的用户,例如,键入以下内容:
Song.find(<some id>).downloaded_users
我取回了用户的完整记录,但是返回的objected中的id是SongDownload的主键,而不是User的主键。所有其他字段都是准确的,但 ID 不准确。
我没有提出这个建模方案,在我看来:has_and_belongs_to_many 可能更适合在没有明确建模的 SongDownload 对象的情况下使用,但如果我能提供帮助,我宁愿不彻底检查代码库。考虑到当前的建模方案,有什么方法可以取回正确的用户 ID?
非常感谢您的时间和考虑!
贾斯汀
【问题讨论】:
标签: ruby-on-rails ruby database model