2010-09-12 2 views
1

Это код, у меня есть в конце в методе создания в контроллереЧто вызывает этот NoMethodError в Ruby on Rails?

Notes

def create 
    @note = Note.new(params[:note]) 
    @note.user_id = current_user.id 
    respond_to do |format| 
     if @note.save 
     flash[:success] = 'Note was created.' 
     # @note.note_type is "Temp" at this point 
     if @note.note_type == "Temp" 
      p "passed first test" 
      redirect_to :controller => :categories, :action => :add_category, :note_id => @note.id, :category => 'temp category' 
     else 
      format.html { redirect_to(@note) } 
      format.xml { render :xml => @note, :status => :created, :location => @note } 
     end 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @note.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

Категории контроллер

def add_category 
    p "in add_category" 
end 

Когда он работает, я получаю следующее сообщение об ошибке. Линия 80, где начинается след, является respond_to do |format| линия:

NoMethodError in NotesController#create 
undefined method `call' for nil:NilClass 
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/whiny_nil.rb:52:in `method_missing' 
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/mime_responds.rb:175:in `respond' 
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/mime_responds.rb:173:in `each' 
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/mime_responds.rb:173:in `respond' 
/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/mime_responds.rb:107:in `respond_to' 
/Users/benhartney/rails_projects/note_taker/app/controllers/notes_controller.rb:80:in `create' 

У меня нет ни малейшего представления о том, как начать отладку этой ошибки. Консоль отображает выходную строку «пройденный первый тест» из действия create в контроллере Notes, но не в строке вывода «в add_category» из действия add_category в контроллере «Категории». Я использую Rails 2.3.5. Любая помощь будет принята с благодарностью. Спасибо за прочтение.

ответ

1

Метод respond_to требует указать по крайней мере один формат объекта Responder, переданного в его блок. В коде-пути, создающем ваше исключение, вы просто вызываете redirect_to, список предпочтений MIME-типа ответа пуст, и Rails заканчивает попытку вызвать метод call для (несуществующего) блока для (несуществующего) первого типа.

Смежные вопросы