在相关模型中通过多个参数找到记录的条件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在相关模型中通过多个参数找到记录的条件?相关的知识,希望对你有一定的参考价值。
我希望通过表单中传递的多个参数找到关联的模型记录,以创建与产品模型相关联的user_product。
在控制器中创建方法:
@user_product = UserProduct.new(user_product_params)
@product = Product.where(style_id: @user_product.style_id).where(size: @user_product.size).where(color: @user_product.color).where(country: @user_product.country)
@user_product.product_id = @product.id
楷模:
产品:
belongs_to :category, foreign_key: :category_id, class_name: "Category"
belongs_to :style, foreign_key: :style_id, class_name: "Style"
belongs_to :user_products
用户产品:
has_one :product
has_many :orders
表单传递:size,color,style_id,category_id
我一直收到错误:
undefined method `id' for #<Product::ActiveRecord_Relation:x> Did you mean? ids
但是所有东西都通过了但是product_id。
如何通过使用表单中传递的多个参数找到product_id?
where
返回一个数组记录,但您只是在寻找一条记录。您可以使用find_by
返回匹配条件的第一条记录(如果没有找到,则返回nil):
@product = Product.find_by(
style_id: @user_product.style_id,
size: @user_product.size,
color: @user_product.color,
country: @user_product.country
)
if @product
@user_product.product_id = @product.id
else
# add an error if the product is not found,
# or do something else
end
从错误消息中可以清楚地看到问题。正如undefined method 'id' for #<Product::ActiveRecord_Relation:x> Did you mean? ids
所表示的那样,您没有一种产品含有id
,但可能是多种产品的关系。所以你可能想尝试:@product.first.id
代替。
当你在查询中使用它时,它将返回ActiveRecord :: Relation,即使它返回单个记录,它也是数组的形式。所以你的@product变量的结果是Array形式,如果你确定你只能从这个查询中获得一条记录,你应该使用.take
方法,但我建议你使用.find_by
方法来查找记录。
where
子句返回ActiveRecord
对象在ActiveRecord_Relation
,即使有一个单一的记录,这是一种Array
。试试这个
@user_product = UserProduct.new(user_product_params)
@products = Product.where(style_id: @user_product.style_id, size: @user_product.size, color: @user_product.color, country: @user_product.country)
@user_product.product_id = @products.first.id
希望你觉得这很有用!!!
where条件为您提供数组中的结果。
试试这个
@product.first.id
以上是关于在相关模型中通过多个参数找到记录的条件?的主要内容,如果未能解决你的问题,请参考以下文章