Что вызывает этот NoMethodError в Ruby on Rails? - PullRequest
1 голос
/ 12 сентября 2010

Это код, который у меня есть в конце и метод создания в

Контроллер нот

  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, но не строку вывода «in add_category» из действия add_category в контроллере Categories. Я использую Rails 2.3.5. Любая помощь будет принята с благодарностью. Спасибо за чтение.

1 Ответ

1 голос
/ 12 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...