在关联模型中通过多重参数找到记录的条件在哪里?

时间:2019-04-12 06:39:37

标签: ruby-on-rails ruby

我想通过表单中传递的多个参数来找到一个关联的模型记录,以创建一个与产品模型关联的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?

5 个答案:

答案 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