Ruby on rails Rails一对多关系-保持秩序

Ruby on rails Rails一对多关系-保持秩序,ruby-on-rails,one-to-many,Ruby On Rails,One To Many,考虑以下代码: 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) 如何保持歌曲的初始顺序?为了获得默认顺序,您可以做一些事情 备选方案a) 备选方案

考虑以下代码:

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)

如何保持歌曲的初始顺序?

为了获得默认顺序,您可以做一些事情

备选方案a)

备选方案b)

我不建议使用默认范围,因为它会导致更多关联的问题


对不起,我想我看错了。如果保持将其添加到图纸模型的顺序,则需要具有某种性质的透视表——创建has_many:through

它将变成一个:

class Sheet
    has_many :songs, :through => :sheet_songs, :order => 'sheet_songs.created_at DESC'
end

为了有一个默认的顺序,你可以做一些事情

备选方案a)

备选方案b)

我不建议使用默认范围,因为它会导致更多关联的问题


对不起,我想我看错了。如果保持将其添加到图纸模型的顺序,则需要具有某种性质的透视表——创建has_many:through

它将变成一个:

class Sheet
    has_many :songs, :through => :sheet_songs, :order => 'sheet_songs.created_at DESC'
end

可能存储一个时间戳,并根据输入的时间对结果排序。。。我不确定这是最明智的方式购买…

可能存储一个时间戳,然后根据输入的时间排序结果。。。我不确定这是购买……最明智的方式。

你也可以
songs=Sheet.find(1).songs.order(“id asc”)
songs=Sheet.find(1).songs.sort\u by(&:id)
@house9我不想按
id
订购。我想保留原始订单,即添加的订单。啊,是的,那么您将需要一个额外的型号,因为
@CrazyVipa
建议您也可以
songs=Sheet.find(1).songs.order(“id asc”)
songs=Sheet.find(1).songs.sort\u by(&:id)
@house9我不想按
id
订购。我想保留原始订单,即添加的订单。啊,是的,那么您将需要一个额外的型号,正如
@CrazyVipa
所建议的那样
class Song
    belongs_to :sheet
    default_scope :order => 'songs.id DESC'
end
class Sheet
    has_many :songs, :through => :sheet_songs, :order => 'sheet_songs.created_at DESC'
end