2017-04-12 1 views
0

Ich habe ein Benutzermodell, das zu Pay-Modell gehört. Wenn ein Benutzer erstellt wird, wird sein Attribut (Jahre) verwendet, um das Pay-Modell abzufragen und ein Objekt zurückzugeben, das eine Rate enthält. Alles funktioniert, wenn ich fragen über:SCHIENEN || ActiveRecord :: AssociationTypeMismatch: Fehler beim neuen Modellobjekt

class User < ApplicationRecord 
    belongs_to :pay 
end 

* CONTROLLER ACTIONS * 
@user = User.new(user_params) 
@user.pay = Pay.find(1) 
=> #< Pay object returned with attributes....> 

Aber die folgenden gibt einen Activerecord :: AssociationTypeMismatch: ....... das ist eine Instanz von Pay :: ActiveRecord_Relation

@user = User.new(user_params) 
@user.pay = Pay.where("years = ?", @user.years) #FAILS 

Auch versucht die folgende ....

@user.pay = Pay.where(years: @user.years) 
@user.pay = Pay.where(years: params[:years] 

Und auch einen String inputing ....

@user.pay = Pay.where(years: "3") 

Also die Abfrage gibt eine Instanz von ActiveRecord_Relation anstelle eines AssociationType zurück?

Antwort

2

where gibt immer eine ActiveRecord-Beziehung zurück, find gibt eine einzelne Instanz zurück. Sie können

@user.pay = Pay.where(years: @user.years).first 

jedoch einen besseren Weg

für ähnliche Wirkung where wie folgt verwenden
@user.pay = Pay.find_by(years: @user.years) 
+1

Dank Iceman wäre. Ich war verdammt nah dran, als ich versuchte, limit (1) anzuhängen, was immer noch fehlschlug. Ihre Lösung funktioniert und ich habe ein wenig mehr über ActiveRecord gelernt. Prost Kumpel! – DawgOnKing

+0

Froh, es hat funktioniert, viel Glück. – Iceman

+2

FWIW '.limit (1)' gibt immer noch eine _one_ ActiveRecord-Relation zurück, die man sich als Array ohne ActiveRecord vorstellen kann. – whodini9

Verwandte Themen