在活动记录中有一个名为find_or_create_by的方便动态属性:
Model.find_or_create_by_<attribute>(:<attribute> => "")
但是,如果我需要通过多个属性find_or_create呢?
假设我有一个模型来处理Group和Member之间的M:M关系,称为GroupMember.我可以有很多实例,其中member_id = 4,但我不想要多于一次的实例,其中member_id = 4和group_id = 7.我正在试图弄清楚是否可以这样做:
GroupMember.find_or_create(:member_id => 4, :group_id => 7)
Run Code Online (Sandbox Code Playgroud)
我意识到可能有更好的方法来处理这个问题,但我喜欢find_or_create这个想法的便利性.
activerecord many-to-many model ruby-on-rails dynamic-attributes
我想使用find_or_create_by,但是这个语句不起作用.它不与其他属性"查找"或"创建".
productproperty = ProductProperty.find_or_create_by_product_id(:product_id => product.id, :property_id => property.id, :value => d[descname])
Run Code Online (Sandbox Code Playgroud)
似乎很少或没有关于在Rails 3中使用动态查找器的信息."和" - 这些一起给了我一个未知的方法错误.
更新:
最初我无法让以下工作.请假设我不是白痴,"产品"是产品AR模型的一个实例.
product.product_properties.find_or_create_by_property_id_and_value(:property_id => 1, :value => "X")
Run Code Online (Sandbox Code Playgroud)
错误方法是:
no such keys: property_id, value
Run Code Online (Sandbox Code Playgroud)
我无法理解这一点.只有今天早上我找到了传递这样的值的引用:
product.product_properties.find_or_create_by_property_id_and_value(1, "X")
Run Code Online (Sandbox Code Playgroud)
瞧,它运作正常.我原本希望哈希在相同的情况下工作,但我猜不是.
如果你错过互联网上的某些内容,我想你会得到一次投票?