2015-09-13 32 views
1

註冊後,我將用戶重定向到他們可以選擇的路線,如果他們想爲他們的帳戶添加照片,但我希望此路線能夠訪問只有在他們註冊後,纔可以在「編輯帳戶」中添加照片,但即使他們在like/users/chosenphoto之後鍵入,我也不希望這條路線被允許。但它不工作,因爲仍然允許路由如何使一條路線被允許僅使用一次

所以,我希望這條路線只有一次(註冊後)可以訪問,所以後面即使他們登錄,他們也會嘗試輸入/ users/chosenphoto I希望它們被重定向到root_path

控制器

before_action :visited_chosephoto, only: [:add_photo] 
... 


def chose_photo 
    @user = current_user 
end 

def add_photo 
    @user = current_user 
    @user.update_attribute(:photo,params[:user][:photo]) 
    @user.chosephoto_visited = true 
    @user.save 
    redirect_to root_path 
end 

用戶模型

def chosephoto_visited=(chosephoto_visited) 
    @chosephoto_visited = chosephoto_visited 
end 

def chosephoto_visited 
    @chosephoto_visited 
end 

方法

def visited_chosephoto 
    redirect_to root_path if current_user.chosephoto_visited 
end 

路線

get 'users/chosephoto' => "users#chose_photo", as: "chosephoto" 

回答

1

你需要在你的控制器來定義:

def can_access_choose_photo? 
    return false unless current_user.present? 
    # return true if request.get? 
    return false if current_user.chosephoto_visited 
    return true 
end 

def choose_photo 
    if can_access_choose_photo? 
    current_user.update_attributes(chosephoto_visited: true) 
    # other actions 
    else 
    redirect_to root_url 
    end 
end 

注1這裏你不需要before_action。檢查僅通過一次操作使用。

注2您還應該添加chosephoto_visited列到你的User模型。否則,它將無法按預期工作。

+0

這不是如果用戶沒有登錄...在用戶註冊後我將他們重定向到/ users/chosenphoto,他們可以選擇一張照片...但後來即使他們登錄,我希望他們不要能夠去這條路線..我想讓這條路線只能使用一次(他們註冊後),因爲他們可以在「編輯個人資料」後面添加一張照片 – eustass

+0

@ kushtrimh請查看更新的答案 – dimakura

0
before_action :visited_chosephoto, only: [:add_photo, :chose_photo] 

添加了過濾器的第二個選項將運行方法也爲chose_photo行動

+0

我試過了,但仍然沒有工作 – eustass

+0

chosen_photo操作的控制器代碼是什麼? – TomD

+0

我在帖子 – eustass

0

如果該頁面的HTTP引用者是用戶註冊,並且您允許用戶訪問選擇圖片頁面,您可以在過濾器之前簽入,否則可以將用戶重定向到根URL。

if !URI(request.referer).path == '/signup' || !URI(request.referer).path == nil 
    redirect_to root_path 
end 
相關問題