gpt4 book ai didi

ruby-on-rails - 如何在 Rails 3 中将多个属性传递给 find_or_create_by?

转载 作者:行者123 更新时间:2023-12-04 04:39:27 27 4
gpt4 key购买 nike

我想使用 find_or_create_by,但此语句不起作用。它不会“查找”或“创建”其他属性。

productproperty = ProductProperty.find_or_create_by_product_id(:product_id => product.id, :property_id => property.id, :value => d[descname])

关于在 Rails 3 中使用动态查找器的信息似乎很少,或者没有。将这些“和”组合在一起给我一个未知的方法错误。

更新:

最初我无法让以下工作正常工作。请假设我不是白痴,“产品”是产品 AR 模型的一个实例。
product.product_properties.find_or_create_by_property_id_and_value(:property_id => 1, :value => "X")

错误方法是:
no such keys: property_id, value

我想不通。直到今天早上,我才找到了传递这样的值的引用:
product.product_properties.find_or_create_by_property_id_and_value(1, "X")

瞧,它工作正常。我本来希望哈希能在相同的情况下工作,但我猜不是。

所以我想如果你错过了互联网上的某些东西,你会得到反对票吗?

最佳答案

如果要按多个属性进行搜索,可以使用“和”来附加它们。例如:

productproperty = ProductProperty.find_or_create_by_product_id_and_property_id_and_value(:product_id => product.id, :property_id => property.id, :value => d[descname])

有一个小问题需要注意。它将始终返回您指定的对象,即使该对象由于验证错误而无法保存。因此,请务必检查返回的对象是否具有 id(或 is_valid?)。不要假设它在数据库中。

或者,如果无法保存对象,您可以使用该方法的“bang”版本来引发错误:

http://guides.rubyonrails.org/active_record_querying.html#find-or-create-by-bang

这适用于 Rails 3。

关于ruby-on-rails - 如何在 Rails 3 中将多个属性传递给 find_or_create_by?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3997034/

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