cma*_*han 9 ruby-on-rails has-and-belongs-to-many rails-activerecord
在我的rails应用程序中,我有两个与has_and_belongs_to_many相关的模型.这意味着有一个连接表.
想象一下我在游戏中添加用户的场景.如果我想添加用户,我会:
@game.users << @user
Run Code Online (Sandbox Code Playgroud)
假设我想知道我添加这些用户的顺序.我可以做这个:
@game.users.each do....
Run Code Online (Sandbox Code Playgroud)
我的问题是:
如果此列表保证每次都以相同的方式读取,是否排序?
如果是这样的话,那么在游戏中重新排序用户的干净方法是什么?
Rya*_*igg 19
扩展danivo答案的底部:
如果你想在它们被添加到这个列表时订购,那么我建议has_and_belongs_to_many你不要使用你实际使用的has_many :through:
game.rb
has_many :played_games
has_many :users, :through => :played_games, :order => "played_games.created_at ASC"
Run Code Online (Sandbox Code Playgroud)
user.rb
has_many :played_games
has_many :games, :through => :played_games
Run Code Online (Sandbox Code Playgroud)
played_game.rb
belongs_to :game
belongs_to :user
Run Code Online (Sandbox Code Playgroud)
当然,名称上有待更改......
在playback_games表中,如果你在游戏中有一个名为created_at第二列的列has_many将按此字段排序,并按照添加到游戏中的顺序返回用户.
dan*_*ich 11
我不确定,但我会说保证顺序与数据库相同,保证结果集的顺序没有order by子句.
您可以:order => "last_name, first_name asc"在:has_and_belongs_to_many关系语句中添加a .这将为返回的项目的顺序设置默认行为.
您还可@game.users.find(:all, :order => "last_name, first_name asc")以为您需要的常见排序执行或创建命名范围.查看api了解详情
如果知道添加它们的顺序非常重要,那么您可能希望切换到has_many :through关系,以便连接表具有自己的实体.然后,你将有一个created_on和updated_on时间戳这种关系的轨道管理.
| 归档时间: |
|
| 查看次数: |
5400 次 |
| 最近记录: |