如何在Rails 3中传递多个属性以查找或创建?

我想使用find_或create_by,但此语句无效。它不使用其他属性“查找”或“创建”

productproperty=productproperty。通过产品id(:product\u id=>product.id,:property\u id=>property.id,:value=>d[descname])查找或创建

关于Rails3中使用动态查找器的信息似乎很少,甚至没有。“和”-将这些结合在一起会给我一个未知的方法错误

更新:

最初,我无法使以下各项正常工作。请假设我不是白痴,“产品”是产品AR模型的一个实例

产品。产品属性。通过属性id和值(:属性id=>1,:值=>“X”)查找或创建

错误方法为:

没有这样的键:属性id、值

我想不出来。直到今天早上,我才找到这样传递值的引用:

产品。产品属性。通过属性、id和值(1,“X”)查找或创建

瞧,它工作得很好。我本以为哈希在同样的情况下也会起作用,但我想不会

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

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

productproperty=productproperty。通过产品id、属性id和值(:product\u id=>product.id,:property\u id=>property.id,:value=>d[descname])查找或创建

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

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

http://guides.rubyonrails.org/active_record_querying.html#find-或者用砰的一声创造

这适用于Rails 3

发表评论