Ruby on rails 如何使用rails应用程序中的嵌套资源修复未定义的方法错误?
当我访问时,我得到一个错误,说“nil:NilClass的未定义方法'verses'”Ruby on rails 如何使用rails应用程序中的嵌套资源修复未定义的方法错误?,ruby-on-rails,resources,Ruby On Rails,Resources,当我访问时,我得到一个错误,说“nil:NilClass的未定义方法'verses'” /books/1/chapters/1/verses/new My routes.rb: resources :books do resources :chapters do resources :verses end end verse_controller.rb: class VersesController < ApplicationController before_
/books/1/chapters/1/verses/new
My routes.rb:
resources :books do
resources :chapters do
resources :verses
end
end
verse_controller.rb:
class VersesController < ApplicationController
before_filter :find_book
before_filter :find_chapter, :only => [:show, :edit, :update, :destroy]
def new
@verse = @chapter.verses.build
end
private
def find_book
@book = Book.find(params[:book_id])
end
def find_chapter
@chapter = Chapter.find(params[:chapter_id])
end
end
class-VersesController[:show,:edit,:update,:destroy]
def新
@verse=@chapter.verses.build
结束
私有的
def查找书
@book=book.find(参数[:book\u id])
结束
def find_章
@chapter=chapter.find(参数[:chapter\u id])
结束
结束
有关于如何解决此问题的建议吗?问题出在您的before\u过滤器上
before_filter :find_chapter, :only => [:show, :edit, :update, :destroy]
现在,您点击了new
,但是在触发new
的过滤器之前没有,因此@章
为零
解决方案:将:new
添加到唯一的数组中
更新使用参数获取ID的方式不正确,参数用于查询字符串或POST。要从path中获取参数,您需要付出一些额外的努力
before_filter: get_resources # Replace your two filters
private
def get_resources
book_id, chapter_id = request.path.split('/')[1, 3]
@book = Book.find(book_id)
@chapter = Chapter.find(chapter_id)
end
当我有puts参数[:chapter_id]时,我会打印参数。但是当我访问页面时,我得到一个错误:unknown attribute:chapter\u id。