【发布时间】:2017-05-12 17:52:08
【问题描述】:
演示我的问题的假设情况:构建一个网络应用程序,允许艺术家创建“专辑”并将“歌曲”添加到这些专辑中。 当用户将歌曲广告到专辑时,我希望该专辑显示在最近更新的专辑列表中。
问题:我不确定如何在 Active Record 中编写此查询,尽管我认为它是可能的。
示例:如果将一首新歌添加到专辑中,那么我希望在结果集中返回该专辑。最终我想要的结果是一组专辑,但该组取决于其更新的子项的类型——歌曲。
换一种说法 - 我希望有人能够访问网页并查看最近更新的所有专辑(更新是在专辑中添加新歌曲时)。
类:
class User < ActiveRecord::Base
has_many :songs
end
class Song < ActiveRecord::Base
belongs_to :user
has_many :album_songs
has_many :albums, :through => :album_songs
# has a release_date field too, which is when the song will be released.
end
class AlbumSong < ActiveRecord::Base
belongs_to :song
belongs_to :album
end
class Album < ActiveRecord::Base
has_many :album_song
has_many :songs, :through => :album_song
end
如何编写查询以返回最近添加了 RELEASED 歌曲的所有专辑?发行的歌曲是
需要考虑的其他事项。如果用户将三首歌曲添加到他们的专辑中,我只希望该专辑在列表中显示一次,而不是三次,如果歌曲已发布。如果歌曲尚未发布,则查询不应返回已更新的该课程。每次添加发布的歌曲时,课程都会在“最近更新”列表中上移。因此我需要一些独特的东西(我认为)。
我不确定这对于 ActiveRecord 是否可行。我最终只需要专辑的title 和id,然后我就可以从那里构建我需要的一切。
最好的方法是什么?
数据库是 Postgres
【问题讨论】:
-
这是一个概念性问题,您的应用可以在添加歌曲时更新您的
users.updated_at字段吗? -
@AlejandroMontilla 不,由于其他业务原因,我们无法更新。
-
向
users添加一列来管理这也不是一种选择? -
@AlejandroMontilla 它不起作用,因为我还需要基于日期字段(release_date)的查询,这是基于时间的。
标签: ruby-on-rails postgresql activerecord