2014-01-10 232 views
0

出於某種原因,我在某些查詢中收到了NoMethodError,實際上它在rails控制檯中工作。在index.html.erbRuby on Rails:使用has_one關聯的未定義方法錯誤

@requests.first.acceptance 

代碼這是我的錯誤

undefined method `acceptance' for #<ActiveRecord::Relation::ActiveRecord_Relation_Arrangement:0x000000042ceeb8> 

這些都是我的模塊。

class Arrangement < ActiveRecord::Base 
    belongs_to :acceptance 
    belongs_to :request 
    belongs_to :offer, inverse_of: :arrangements 
end 

class Acceptance < ActiveRecord::Base 
    belongs_to :user, inverse_of: :acceptances 
    has_one :arrangement 
end 

class Request < ActiveRecord::Base 
    belongs_to :user, inverse_of: :requests 
    has_one :arrangement 
end 

這是我的控制器

def index 
    @requests = Array.new 
    for request in current_user.requests do 
     @requests << Arrangement.where("request_id = ?", request.id) 
    end 
    @acceptances = Array.new 
    for acceptance in current_user.acceptances do 
     @acceptances << Arrangement.where("acceptance_id = ?", acceptance.id) 
    end 
end 

我想不出我做了什麼錯在這裏。一切都在控制檯中運行,但不在瀏覽器中。

回答

3
Arrangement.where("request_id = ?", request.id) 

返回一個類似數組的關係對象,它可能包含多條記錄,而不僅僅是一條記錄。

然而,在這條線在你的控制器

@requests << Arrangement.where("request_id = ?", request.id) 

您要添加的關係到你的行列,從而使

@requests.first.acceptance 

返回,而不是第一個記錄的關係。解決這個問題

一種方法是做到這一點在你的控制器:

@requests = Array.new 
for request in current_user.requests do 
    @requests << Arrangement.where("request_id = ?", request.id).first 
end 
+0

感謝您的回答:-)即使我現在自己找到了錯誤,我會接受您的答案! – JustBasti

+1

不客氣!像這些微小的錯誤往往是最難找到的。 ;)他們中的大多數人都要等到星期五纔出現! – fivedigit

0

解決

我經過@requests數組的數組在我的控制器。

相關問題