Ruby on Rails: сбой при использовании имени метода request в контроллере - PullRequest
0 голосов
/ 18 мая 2010

Я в полной растерянности относительно того, что я делаю неправильно со следующим кодом. Я пытаюсь внедрить систему обмена сообщениями в моем приложении, но хочу, чтобы она обрабатывала разные типы сообщений. В этом случае я хочу создать сообщение «request»: «message_type => 1».

Вместо того чтобы использовать формы, как обычно, я хочу создать этот экземпляр в тот момент, когда ссылка нажата. Вот как я настроил его в файле show erb для «пользователя»:

<%=link_to "Send friend request", :action=>"request", :controller => "messages", :id => @user.id %>

и в контроллере:

  def request
    @message = Message.new(:sender_id => current_user.id,:user_id => params[:id],:message_type => 1)
    if @message.save
        flash[:notice] = 'Message was successfully created.'
        redirect_to message_path(@message)
      else
        redirect_to message_path(@message)
      end
  end

Это приводит к следующему сообщению об ошибке: неопределенный метод `rewrite 'для nil: NilClass с трассировкой, похожей на

 c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/whiny_nil.rb:52:in `method_missing'
    c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/base.rb:634:in `url_for'
    (eval):16:in `message_path'
    app/controllers/messages_controller.rb:11:in `request'

Я использовал map.resources: messages в файле rout.rb и сделал соответствующие ассоциации: has_many и: own_to в моделях user и message.

РЕДАКТИРОВАТЬ: Что еще нужно отметить, это то, что сохранение завершается успешно, так как после того, как корневой адрес вручную вводится в адресную строку, появляется «флэш» уведомление о том, что сохранение было выполнено. С помощью консоли разработки она действительно есть, поэтому с редиректом что-то напуталось.

Ответы [ 2 ]

2 голосов
/ 18 мая 2010

Возможно, вы захотите переименовать действие, я уверен, что request что-то значит в контроллере.

Почему бы вам не переименовать действие с request на create и посмотреть, поможет ли оно.

Таким образом, код будет:

По виду

<%=link_to "Send friend request", :action=>"create", :controller => "messages", :id => @user.id %>

В контроллере

 def create
    @message = Message.new(:sender_id => current_user.id,:user_id => params[:id],:message_type => 1)
    if @message.save
      flash[:notice] = 'Message was successfully created.'
      redirect_to message_path(@message)
    else
      redirect_to message_path(@message)
    end
  end
0 голосов
/ 18 мая 2010

Внимательно проверьте свои журналы, и вы, вероятно, обнаружите, что сохранение не удается. Не уверен, какая строка # 11, но я бы предположил, что она находится в вашем блоке else, который пытается построить путь для объекта @message с идентификатором nil (он не был сохранен).

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