RAILS || ActiveRecord :: AssociationTypeMismatch:新模型对象出错

时间:2017-04-12 19:31:36

标签: ruby-on-rails activerecord

我有一个属于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 ??

1 个答案:

答案 0 :(得分:2)

where始终返回ActiveRecord关系,find返回单个实例。你可以像这样使用where来达到类似的效果

@user.pay = Pay.where(years: @user.years).first
然而,更好的方法是

@user.pay = Pay.find_by(years: @user.years)