首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails一对多关系保持顺序

Rails一对多关系保持顺序
EN

Stack Overflow用户
提问于 2012-07-14 03:58:08
回答 2查看 492关注 0票数 0

考虑下面的代码:

代码语言:javascript
复制
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订购的歌曲。

代码语言:javascript
复制
songs = Sheet.find(1).songs

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-14 04:03:34

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

选项a)

代码语言:javascript
复制
class Sheet
    has_many :songs, :order => 'songs.id DESC'
end

选项b)

代码语言:javascript
复制
class Song
    belongs_to :sheet
    default_scope :order => 'songs.id DESC'
end

我不建议使用默认作用域,因为它往往会导致更多关联的问题。

对不起,我想我看错了。如果要保持添加到工作表模型的顺序,则需要某种性质的数据透视表--创建一个has_many :通过

它会变成一个:

代码语言:javascript
复制
class Sheet
    has_many :songs, :through => :sheet_songs, :order => 'sheet_songs.created_at DESC'
end
票数 3
EN

Stack Overflow用户

发布于 2012-07-14 04:06:43

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11477510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档