2014-01-10 2 views
0

По какой-то причине я получаю NoMethodError для некоторого запроса, который фактически работает в консоли rails.Ruby on Rails: Неопределенный метод Ошибка с ассоциациями has_one

Код в index.html.erb

@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 в моем контроллере.

Смежные вопросы