ruby-on-rails – 参考has_many(Rails)中的实例
我有一个游戏模型has_many:文本.问题是我必须根据他们属于哪个游戏来区分不同的文本(是的,丑陋的,但它是遗留数据).我创建了一个Text.in_game_order_query(游戏)方法,它返回适当的顺序.
我最喜欢的解决方案是在Text模型中放置一个默认范围,但这需要知道它们属于哪个游戏.我也不想为每个游戏的文本创建单独的类 – 有很多游戏,有更多的游戏,所有较新的游戏将使用相同的顺序.所以我有另一个想法:在has_many中订购文本,当我知道它们属于哪个游戏时: has_many :texts,:order => Text.in_game_order_query(self) 但是,self就是这里的类,所以这不起作用. 除了每次调用@ game.texts.in_game_order(@game)之外,真的没有其他解决方案吗? 解决方法
我最近遇到了一个非常类似的问题,我确信在Rails中这是不可能的,但我学到了一些非常有趣的东西.
您可以为范围声明一个参数,然后不将其传入,默认情况下它将传递给父对象! 所以,你可以这样做: class Game < ActiveRecord has_many :texts,-> (game) { Text.in_game_order_query(game) } 信不信由你,你不必传递游戏. Rails会为你神奇地做.你可以简单地做: game.texts 但有一点需要注意.如果您启用了预加载,这在目前的Rails中将不起作用.如果您这样做,您可能会收到此警告:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |