Ruby on Rails:has_one关联的未定义方法错误

时间:2014-01-10 13:47:13

标签: ruby-on-rails activerecord associations

出于某种原因,我得到了一些查询的NoMethodError,它实际上可以在rails控制台中使用。

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

我无法弄清楚我在这里做错了什么。一切都在控制台中工作,但不在浏览器中。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

<强>解决

我在控制器的@requests数组中传递了一个数组。