我想通过表单中传递的多个参数来找到一个关联的模型记录,以创建一个与产品模型关联的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
UserProduct:
has_one :product
has_many :orders
表格通过: 尺寸,颜色,style_id,category_id
我不断收到错误消息:
undefined method `id' for #<Product::ActiveRecord_Relation:x> Did you mean? ids
所有内容都可以通过,但product_id可以通过。
如何使用表单中传递的多个参数找到product_id?
答案 0 :(得分:2)
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
答案 1 :(得分:0)
从错误消息中可以很明显地看出您遇到的问题。正如undefined method 'id' for #<Product::ActiveRecord_Relation:x> Did you mean? ids
所表示的,您没有一个产品带有id
,而是一个(可能)多个产品之间的关系。因此,您可能想尝试:@product.first.id
。
答案 2 :(得分:0)
在使用where查询时,它将返回ActiveRecord :: Relation,即使数组返回单个记录,它也将采用数组形式。因此,您的@product变量的结果为数组形式,如果您确定只能从该查询中获取一条记录,则应使用.take
方法,但是我建议您使用.find_by
方法来查找记录
答案 3 :(得分:0)
where
子句在ActiveRecord
的{{1}}中返回ActiveRecord_Relation
个对象,即使只有一条记录也是如此。试试这个
Array
希望对您有帮助!
答案 4 :(得分:0)
where条件给出数组中的结果。
尝试一下
@product.first.id