0

我在访问时收到一条错误消息,提示“nil:NilClass 的未定义方法 `verses'”

/books/1/chapters/1/verses/new

我的路线.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

关于如何解决这个问题的任何建议?

4

1 回答 1

0

问题出在你的 before_filter

before_filter :find_chapter, :only => [:show, :edit, :update, :destroy]

现在你打了new,但没有before_filter触发 for new,所以@chapter是 nil 。

解决方案:添加:new到唯一的数组。

更新使用 params 获取 id 的方式不正确,params 用于查询字符串或 POST。您需要付出一些额外的努力才能从路径中获取参数。

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
于 2013-05-04T16:35:49.270 回答