当我访问
时,我收到一条错误说“未定义的方法`经文'为nil:NilClass”/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
关于如何解决这个问题的任何建议?
答案 0 :(得分:0)
问题在于你的before_filter
before_filter :find_chapter, :only => [:show, :edit, :update, :destroy]
现在您点击了new
,但before_filter
没有触发new
,因此@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