Одно предложение по вопросу «что» в вашем вопросе: вместо идеального URL-адреса будет localhost: 3000 / users / current_user Я предлагаю localhost: 3000 / user или что-то еще более информативное, например localhost: 3000 / профиль или localhost: 3000 / учетная запись .
Не могли бы вы включить записи в вашем route.rb? Даже если Authlogic и т. Д. Добавляют маршруты к вашему приложению, они должны делать это в rout.rb. Если у вас есть запись:
map.resource :users
тогда вот откуда идет маршрут / users / 123. Я согласен с Matchu, что даже если вы не используете / users / 123, вы должны сохранить его и направить к нему другие запросы.
Дополнительная идея
Если вы не хотите заниматься (довольно сложным и не очень) делом сохранения ошибок проверки модели через перенаправления, попробуйте другой способ. Отсюда я предполагаю, что у вас уже есть map.resource: users, так что у вас есть 7 стандартных действий на вашем UsersController (индексировать, создавать, показывать, редактировать, обновлять, уничтожать).
В ваших маршрутах.rb:
map.profile 'profile', :controller => 'users', :action => 'show'
map.edit_profile 'profile/edit', :controller => 'users', :action => 'edit', :conditions => { :method => :get }
map.update_profile 'profile/edit', :controller => 'users', :action => 'update', :conditions => { :method => :put }
Вам нужно будет немного обновить тэг form_for:
<% form_for @user, :url => update_profile_path do |f| %> ...
Теперь, при условии, что вы начинаете с / profile и нажимаете ссылку для редактирования, которая ведет к / profile / edit (должна отображаться форма), если вы заполняете форму так, что она не проходит проверку, вы должны снова вернуться на / profile / edit с правильными ошибками в выводе f.error_messages.
Ваш код контроллера для редактирования должен оставаться прежним, а ваш код для обновления должен быть:
def update
@user = current_user || User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:notice] = "Successfully updated user."
redirect_to @user
else
render :action => 'edit'
end
end
Визуализация (а не перенаправление) сохраняет состояние модели @user (включая ошибки) и просто визуализирует шаблон редактирования снова. Поскольку вы указали его на update_profile_path, URL, который просматривает пользователь, по-прежнему /profile/edit.