gpt4 book ai didi

ruby-on-rails - Rails 4 中 has_many 内部的静态作用域

转载 作者:数据小太阳 更新时间:2023-10-29 08:59:15 25 4
gpt4 key购买 nike

我遇到了以下问题。我想在模型中设置一定数量的 has_many 关系,名称取自传递的数组(或在本例中为散列的键)。像这样:

object_class_names = {:foo => FooClass, :bar => BarClass}

for key_name in object_class_names.keys
has_many "#{key_name}_objects".to_sym,
-> {where(var: key_name)},
:class_name => object_class_names[key_name]
end

这导致两个 has_many 关系:some_object.foo_objectssome_object.bar_objects。两者都有一个特定的 class_name 和一个特定的范围,在 lambda 的 where 子句中设置。但是,因为作用域是一个 lambda,它会动态地在 where 子句中获取 key_name。这是最后一个已知的 key_name 变量,它是循环中的最后一个,在本例中为“bar”。所以 foo_objectsbar_objects 都返回一组范围为 where(var: "bar") 的对象。

通常 lambda 是在 has_many 关系中传递动态范围的好方法,但在这种情况下我真的不需要它。是否可以在 has_many 关系中设置静态范围?

最佳答案

您可能会使用 Hash#each_pair这里:

object_class_names.each_pair do |key_name, klass|
has_many :"#{key_name}_objects", -> { where(var: key_name) }, class_name: klass.to_s
end

关于ruby-on-rails - Rails 4 中 has_many 内部的静态作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40385998/

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