我有以下型号
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
答案 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)