考虑下面的代码:
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如何才能保持歌曲的初始顺序?
发布于 2012-07-14 04:03:34
为了有一个默认的顺序,你可以做一些事情。
选项a)
class Sheet
has_many :songs, :order => 'songs.id DESC'
end选项b)
class Song
belongs_to :sheet
default_scope :order => 'songs.id DESC'
end我不建议使用默认作用域,因为它往往会导致更多关联的问题。
对不起,我想我看错了。如果要保持添加到工作表模型的顺序,则需要某种性质的数据透视表--创建一个has_many :通过
它会变成一个:
class Sheet
has_many :songs, :through => :sheet_songs, :order => 'sheet_songs.created_at DESC'
end发布于 2012-07-14 04:06:43
也许可以存储一个时间戳,并根据输入时间对结果进行排序……我不确定这是不是最明智的购买方式。
https://stackoverflow.com/questions/11477510
复制相似问题