在相关模型中通过多个参数找到记录的条件?

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

以上是关于在相关模型中通过多个参数找到记录的条件?的主要内容,如果未能解决你的问题,请参考以下文章

在python中通过多个条件合并不同数量的行和列

在 JSF 1.2 中通过 EL 调用带参数的方法

URL 片段中的多个参数

无法在 MySQLi 中通过引用传递参数 [重复]

如何在快递js中通过id删除多个集合中的记录?

什么是结构风险?在决策树类相关算法中通常有哪些正则化参数来控制模型的结构风险?解读一下