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