gpt4 book ai didi

ruby-on-rails - 引用 has_many (Rails) 中的实例

转载 作者:行者123 更新时间:2023-12-04 17:24:35 25 4
gpt4 key购买 nike

我有一个游戏模型,它 has_many :texts。问题是我必须根据它们所属的游戏对文本进行不同的排序(是的,丑陋,但它是遗留数据)。我创建了一个 Text.in_game_order_query(game)方法,它返回适当的排序。

我最喜欢的解决方案是在 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 中不起作用。如果这样做,您可能会收到以下警告:

DEPRECATION WARNING: The association scope 'texts' is instance dependent (the scope block takes an argument). Preloading happens before the individual instances are created. This means that there is no instance being passed to the association scope. This will most likely result in broken or incorrect behavior. Joining, Preloading and eager loading of these associations is deprecated and will be removed in the future.

关于ruby-on-rails - 引用 has_many (Rails) 中的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11949868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com