考虑以下代码:
class Sheet
has_many :songs
end
class Song
belongs_to :sheet
end
sheet = Sheet.find(1)
sheet.songs << Song.find(5)
sheet.songs << Song.find(10)
sheet.songs << Song.find(8)
现在问题在于,当我运行下面的代码时,它会返回该表单的歌曲列表,但它们与我在(5,10,8)中添加它们的顺序不同。它实际上给了我name
订购的歌曲。
songs = Sheet.find(1).songs
如何保持歌曲的初始顺序?
答案 0 :(得分:3)
为了拥有默认订单,您可以做一些事情。
选项a)
class Sheet
has_many :songs, :order => 'songs.id DESC'
end
选项b)
class Song
belongs_to :sheet
default_scope :order => 'songs.id DESC'
end
我不建议做默认范围,因为它往往会导致更多关联的问题。
对不起,我想我读错了。如果您保留将其添加到Sheet模型的顺序,则需要一个具有某种性质的数据透视表 - 创建一个has_many:through
它会变成:
class Sheet
has_many :songs, :through => :sheet_songs, :order => 'sheet_songs.created_at DESC'
end
答案 1 :(得分:0)
也许存储一个时间戳,并根据输入的时间对结果进行排序......我不确定它是最聪明的方式买...