У меня есть пространство имен, называемое «backend», которое защищено Devise. Теперь я хочу, чтобы пользователи могли редактировать свой профиль.Как разрешить пользователям редактировать свой профиль?
Так что я создал users_controller
в Backend. Вот users_controller
код:
class Backend::UsersController < ApplicationController
layout 'admin'
before_filter :authenticate_user!
def index
@users = Backend::User.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @users }
end
end
def show
@user = Backend::User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @user }
end
end
def edit
@user = Backend::User.find(params[:id])
end
def update
@user = Backend::User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to @user, notice: 'Article was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
end
Когда я иду на backend_users_path
есть список всех пользователей. Я хотел бы разрешить редактировать только его собственный профиль. Итак, я перехожу на страницу редактирования: <%= link_to "Edit", edit_backend_user_path(backend_user.id) %>
. Вот код редактирования страницы:
<%= simple_form_for @user do |f| %>
<div><%= f.label :email %><br />
<%= f.input :email, :autofocus => true %></div>
<div><%= f.submit "Update" %></div>
<% end %>
И моя проблема: когда я пытаюсь изменить адрес электронной почты, ничего не произойдет. Обновление не выполняется.
Как я могу это сделать? Я совсем потерян. Спасибо заранее.
Вот лог-файл:
Started PUT "/backend/users/1" for 127.0.0.1 at 2012-11-13 12:13:51 +0100
Processing by Backend::UsersController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"wWrUDh7LVWhP+P7OWO6laDWaCKInxk37AA2BPuQWAI4=", "backend_user"=>{"email"=>"[email protected]"}, "commit"=>"Update", "id"=>"1"}
[1m[35mBackend::User Load (0.0ms)[0m SELECT `backend_users`.* FROM `backend_users` WHERE `backend_users`.`id` = 1 LIMIT 1
[1m[36mBackend::User Load (0.0ms)[0m [1mSELECT `backend_users`.* FROM `backend_users` WHERE `backend_users`.`id` = ? LIMIT 1[0m [["id", "1"]]
[1m[35mSQL (1.0ms)[0m BEGIN
[1m[36m (0.0ms)[0m [1mCOMMIT[0m
Redirected to http://localhost:3000/backend/users/1
Completed 302 Found in 23ms (ActiveRecord: 1.0ms)
Started GET "/backend/users/1" for 127.0.0.1 at 2012-11-13 12:13:51 +0100
Processing by Backend::UsersController#show as HTML
Parameters: {"id"=>"1"}
[1m[35mBackend::User Load (0.0ms)[0m SELECT `backend_users`.* FROM `backend_users` WHERE `backend_users`.`id` = 1 LIMIT 1
[1m[36mBackend::User Load (0.0ms)[0m [1mSELECT `backend_users`.* FROM `backend_users` WHERE `backend_users`.`id` = ? LIMIT 1[0m [["id", "1"]]
Rendered backend/users/show.html.erb within layouts/admin (0.0ms)
Completed 200 OK in 7ms (Views: 5.0ms | ActiveRecord: 0.0ms)
Спасибо за ваши ссылки, я попытался изменить мой user_controller
с
if params[:user][:password].blank?
params[:user].delete("password")
params[:user].delete("password_confirmation")
end
@user = User.find(current_user.id)
if @user.update_attributes(params[:user])
# Sign in the user bypassing validation in case his password changed
sign_in @user, :bypass => true
redirect_to root_path
else
render "edit"
end
Но он не ...
Спасибо за заботу о моей проблеме. Я отредактирую свой пост с журналами и дополнительной информацией. –
Поделитесь сообщением об ошибке, пожалуйста, оно должно быть в '@ user.errors'. – Thilo