Я пытаюсь сохранить красивый URL, когда пользователь отправляет сообщения с ошибочной проверкой.
У меня есть файл маршрутов, который выглядит следующим образом:
# For logged users convenience
# example.com/messages
# instead of: example.com/users/:user_id/messages
map.resources :messages
# For everyone else
map.resources :users do |p|
p.resources :messages
end
Итак new_user_message_path (@user) возвращает:
/users/:user_id/messages/new
Представление new.erb сообщения выдает правильный код:
<form action="/users/:user_id/messages" .........
При сбое проверки отображаются ошибки формы, но отображается неправильное действие:
<form action="/messages" .........
Таким образом, второй раз, когда пользователь отправляет форму, метод " create " не может найти user_id
Вот мои методы контроллера:
def new
@user = User.find(params[:user_id])
@message = @user.messages.build
end
def create
@user = User.find(params[:user_id])
@message = @user.messages.new(params[:message])
if @message.save
flash[:notice] = 'Message saved'
redirect_to user_url(@user)
else
render :action => "new" # Here is the problem I guess
end
end
И мой вид формы:
<% form_for [@user, @message] do |f| %>
<%= f.error_messages %>
Name:<%= f.text_field :name %>
Email:<%= f.text_field :email %>
Message:<%= f.text_area :body, :rows => 3 %>
<%= f.submit 'Send' %>
<% end %>