我有一个属于pay_to支付模型的用户模型。因此,在创建用户时,其(年)属性用于查询Pay模型并返回包含速率的对象。如果我通过以下方式查询,一切正常:
class User < ApplicationRecord
belongs_to :pay
end
* CONTROLLER ACTIONS *
@user = User.new(user_params)
@user.pay = Pay.find(1)
=> #< Pay object returned with attributes....>
但是以下内容返回一个ActiveRecord :: AssociationTypeMismatch:.......这是Pay :: ActiveRecord_Relation的一个实例
@user = User.new(user_params)
@user.pay = Pay.where("years = ?", @user.years) #FAILS
还试过以下......
@user.pay = Pay.where(years: @user.years)
@user.pay = Pay.where(years: params[:years]
甚至输入字符串......
@user.pay = Pay.where(years: "3")
因此查询返回ActiveRecord_Relation的实例而不是AssociationType ??
答案 0 :(得分:2)
where
始终返回ActiveRecord关系,find
返回单个实例。你可以像这样使用where
来达到类似的效果
@user.pay = Pay.where(years: @user.years).first
然而,更好的方法是
@user.pay = Pay.find_by(years: @user.years)