Ruby on rails 如何使用rails应用程序中的嵌套资源修复未定义的方法错误?

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_

当我访问时,我得到一个错误,说“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_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。