2012-11-13 6 views
0

У меня есть пространство имен, называемое «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 

Но он не ...

ответ

0

Если ничего не происходит, что обычно указывает на ошибку проверки, в вашем случае, вероятно, отсутствующий пароль или другие данные, которые не являются частью вашей формы, но все еще проверяются. Чтобы отладить это, выведите @user.errors.inspect в свой файл журнала или посмотрите на error_messages_on @user на ваш взгляд.

В общем, посмотрите на эти руководства о том, как разрешить пользователям редактировать их (частично) профиль:

+0

Спасибо за заботу о моей проблеме. Я отредактирую свой пост с журналами и дополнительной информацией. –

+0

Поделитесь сообщением об ошибке, пожалуйста, оно должно быть в '@ user.errors'. – Thilo

Смежные вопросы