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