0

にアクセスすると、「nil:NilClass の未定義メソッド `verses'」というエラーが表示されます

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

私の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

これを修正する方法についてアドバイスはありますか?

4

1 に答える 1

0

問題は before_filter にあります

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

これで をヒットしましたが、 のトリガーnewはありません。つまり、nil です。before_filternew@chapter

: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 に答える