Прежде всего, ваш механизм аутентификации должен установить текущего пользователя.
routes.rb
map.account '/settings/account', :controller => 'user', :action => 'edit'
map.profile '/settings/profile', :controller => 'user', :action => 'edit_profile'
map.resources :users, :only => [:edit, :update, :show],
:member => { :edit_profile => :get, :update_profile, :put }
производит следующие маршруты:
/settings/account (get)
/settings/profile (get)
/users/:id (get, put)
/users/:id/edit (get)
/users/:id/edit_profile (get)
/users/:id/update_profile (put)
users_controller.rb
before_filter :redirect_if_unauthorized
def edit
@user = current_user
end
# profiles_controller
def edit
@user = current_user
@profile = @user.profile
end
protected
def redirect_if_unauthorized
redirect_to some_path if params[:id] or current_user.nil?
end
Очевидно, что some_path не существует, вам придется создать страницу / путь и т. Д. Для отображения ошибки.
С этим решением вы никогда не будете отображать / манипулировать пользователем на основе параметров [: id], только текущий_пользователь, сохраненный вашей схемой аутентификации.
Я также мог бы предложить посмотреть на гем / плагин Declarative_authorization ( Github , Railscast )