2014-11-13 2 views
0

Я новичок в рубинах на рельсах, и я пытаюсь обновить своего пользователя, но когда мой пользователь обновлен, я не могу перенаправить на мой current_user. Это мой контроллер:не может redirect_to current_user в ruby ​​on rails

class WelcomeController < ApplicationController 
    def index 
    @users = (current_user.blank? ? User.all : User.find(:all, :conditions => ["id != ?", current_user.id])) 
    end 

    def create 
    user = User.login(params[:session][:username], params[:session][:pass]) 
    if user 
     login user 
     redirect_to root_url 
    else 
     redirect_to welcome_index_path 
    end 
    end 

    def sucess 
    @user = User.find(params[:id]) 
    @relation = Relation.new 
    end 

    def edit 
    if current_user.update_attributes(:image => params[:image]) 
     logger.debug "image: #{current_user.image}" 
     if current_user.changed? 
     redirect_to current_user 
     else 
     render 'edit' 
     end 
    else 
    end 
    end 

    def destroy 
    logout 
    redirect_to root_url 
    end 
end 

мои маршруты

get "uploads/new" 

    get "micropost/new" 

    get "user/new" 
    get "user/saved" 

    get "post/new" 
    get "post/show" 

    get "welcome/index" 
    get "welcome/sucess" 
    get "welcome/edit" 
    get "welcome/test" 
    root :to => "welcome#index" 
    get '/users/:id', :to => 'welcome#sucess', :as => "user" 

    match '/relations', to: 'relation#create', via: 'post' 
    match '/relations/:id', to: 'relation#destroy', via: 'delete' 
    resources :users 
    resources :relations, only: [:create, :destroy] 
    resources :microposts 
    resources :uploads 


    match '/welcome/edit', to: 'welcome#edit', via: 'post' 
    match '/login', to: 'welcome#create', via: 'post' 
    match '/logout' => 'welcome#destroy', as: :logout 
    match '/create', to: 'micropost#create', via: 'post' 
    match '/signup', to: 'user#signup', via: 'post' 

Когда я проверить файл журнала:

Started POST "/welcome/edit?method=post" for 127.0.0.1 at 2014-11-13 15:09:00 +0700 
Processing by WelcomeController#edit as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"XHQeEBjnndipJ8c4TrOnn5Yzh7xqvcEhl4+L7BbGBY0=", "image"=>"Hydrangeas.jpg", "commit"=>"Save", "method"=>"post"} 
    [1m[35mUser Load (1.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] 
    [1m[36m (0.0ms)[0m [1mbegin transaction[0m 
    [1m[35mUser Exists (0.0ms)[0m SELECT 1 AS one FROM "users" WHERE ("users"."username" = 'sa1234' AND "users"."id" != 10) LIMIT 1 
    [1m[36m (1.0ms)[0m [1mUPDATE "users" SET "image" = 'Hydrangeas.jpg', "updated_at" = '2014-11-13 08:09:00.576402' WHERE "users"."id" = 10[0m 
    [1m[35m (157.0ms)[0m commit transaction 
    [1m[36mUser Load (0.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1[0m [["id", 10]] 
image: Hydrangeas.jpg 
    [1m[35mCACHE (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] 
    [1m[36mCACHE (0.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1[0m [["id", 10]] 
    Rendered welcome/edit.html.erb within layouts/application (4.0ms) 
    [1m[35mCACHE (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] 
    [1m[36mCACHE (0.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1[0m [["id", 10]] 
    [1m[35mCACHE (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] 
    [1m[36mCACHE (0.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1[0m [["id", 10]] 
    [1m[35mCACHE (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] 
Completed 200 OK in 219.0ms (Views: 52.0ms | ActiveRecord: 159.0ms) 

Я не знаю, как мое приложение визуализации редактировать без моего обновления current_user sucessfull, пожалуйста! помочь мне исправить это :)

Update: @Jakob S, это мой журнал, когда я пытаюсь код:

Started GET "/welcome/edit" for 127.0.0.1 at 2014-11-13 15:21:57 +0700 
Processing by WelcomeController#edit as HTML 
    [1m[36mUser Load (1.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1[0m [["id", 10]] 
    [1m[35m (0.0ms)[0m begin transaction 
    [1m[36mUser Exists (1.0ms)[0m [1mSELECT 1 AS one FROM "users" WHERE ("users"."username" = 'sa1234' AND "users"."id" != 10) LIMIT 1[0m 
    [1m[35m (0.0ms)[0m commit transaction 
    [1m[36mCACHE (0.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1[0m [["id", 10]] 
image: 
    [1m[35mCACHE (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] 
Redirected to http://localhost:3000/users/10 
Completed 302 Found in 5.0ms (ActiveRecord: 2.0ms) 


Started GET "https://stackoverflow.com/users/10" for 127.0.0.1 at 2014-11-13 15:21:57 +0700 
Processing by WelcomeController#sucess as HTML 
    Parameters: {"id"=>"10"} 
    [1m[36mUser Load (0.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1[0m [["id", "10"]] 
    [1m[35mUser Load (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] 
    [1m[36mCACHE (0.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1[0m [["id", 10]] 
    [1m[35mUser Load (0.0ms)[0m SELECT "users".* FROM "users" INNER JOIN "relations" ON "users"."id" = "relations"."following_id" WHERE "relations"."follower_id" = 10 
    [1m[36mUser Load (0.0ms)[0m [1mSELECT "users".* FROM "users" INNER JOIN "relations" ON "users"."id" = "relations"."follower_id" WHERE "relations"."following_id" = 10[0m 
    Rendered welcome/sucess.html.erb within layouts/application (7.0ms) 
    [1m[35mCACHE (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] 
    [1m[36mCACHE (0.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1[0m [["id", 10]] 
    [1m[35mCACHE (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] 
    [1m[36mCACHE (0.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1[0m [["id", 10]] 
    [1m[35mCACHE (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 10]] 
Completed 200 OK in 39.0ms (Views: 37.0ms | ActiveRecord: 0.0ms) 
+0

Просьба. опубликовать весь код вашего контроллера и route.rb. – RedZagogulin

+0

Я отредактировал мой вопрос, пожалуйста см. Его –

+0

Пожалуйста, разместите полный журнал с соответствующим действием. Должна быть релевантная выходная строка над линией 'image: Desert.jpg'. –

ответ

0

current_user.changed? является причиной ваших проблем.

changed? является частью Rails Dirty model checking. Модели с грязными состояниями (т.е. какие атрибуты были изменены) сбрасываются при сохранении модели.

update_attributesupdates all attributes and saves the object. Таким образом, current_user.changed? всегда будет false сразу после update_attributes, так как модель не была изменена с момента последнего сохранения.

Снимите флажок для changed? и связанной с ним render "edit" части, и вы должны быть хорошо идти:

def edit 
    if current_user.update_attributes(:image => params[:image]) 
    redirect_to current_user 
    else 
    render 'edit' 
    end 
end 

Дополнительный совет: Вообще говоря, действие, как тот, который вы реализующего, где Вы пополняете ресурс , обычно идут в действии update. Действие edit обычно используется для отображения пользовательского интерфейса для изменения ресурса.

+0

Я пробовал это раньше, но это не сработало –

+0

Я даже не могу перейти на мою страницу редактирования. Я отправил свой журнал с вашим кодом, пожалуйста, посмотрите! –

+0

Беглый взгляд на журнал показывает, что вы действительно можете перейти на страницу редактирования и фактически перенаправить на текущего пользователя. Насколько я могу судить, все работает. Если у вас есть дополнительные проблемы и вопросы, не стесняйтесь публиковать еще один вопрос, просто детали, необходимые для воспроизведения этой новой проблемы. Я буду рад попробовать и ответить там, но в этом вопросе это будет слишком грязно. –