获取ActiveRecord :: Relation的未定义方法

时间:2012-01-13 09:52:59

标签: ruby-on-rails activerecord

我有以下型号

class Book < ActiveRecord::Base
  has_many :chapters
end

class Chapter < ActiveRecord::Base
    belongs_to :book
end

/chapters/edit/id我得到了

undefined method `book' for #<ActiveRecord::Relation:0x0000010378d5d0>

当我尝试访问这样的书时

@chapter.book

4 个答案:

答案 0 :(得分:56)

看起来@chapter不是单个章对象。如果@chapter被初始化的东西是这样的:

@chapter = Chapter.where(:id => params[:id])

然后你得到一个Relation对象(可以被视为一个集合,但不是一个对象)。因此,要解决此问题,您需要使用find_by_id检索记录,或从集合中获取第一个记录

@chapter = Chapter.where(:id => params[:id]).first

@chapter = Chapter.find_by_id(params[:id])

答案 1 :(得分:4)

正如其他人所说的那样 - 添加.first方法将解决此问题。通过它的唯一ID调用@chapter时,我遇到过这个问题。在Rails 4中添加.first(或.take)将确保只返回一个对象。

答案 2 :(得分:3)

尝试:Chapter.find(params[:id]).first

答案 3 :(得分:0)

我遇到了类似的错误

Books.chapters
NoMethodError: undefined method `chapters' for #<Book::ActiveRecord_Relation:0x00007f8f9ce94610>

我需要的是:

Books.includes(:chapters)