2015-09-28 88 views
1

我試圖讓用戶只有在配置文件屬於他們時才顯示編輯按鈕。目前,他們只允許編輯屬於他們的個人資料,但我似乎無法隱藏該按鈕。我有這個迄今爲止僅顯示編輯按鈕current_user(Rails 4)

<% if request.original_url == request.base_url + "current_user.id" %> 
    <%= link_to "Edit Profile", edit_user_path(current_user), class: "btn btn-primary btn-xs" %>&nbsp; 
<% end %> 

這就是我試圖比較:

request.original_url =>本地主機:3000 /用戶/ random_user

request.base_url + 「用戶/」 + current_user.id => localhost:3000/users/current_user

在此先感謝。

回答

3

授權

給你一些觀點,你會尋找一些所謂authorization

這是認證不同,因爲它與權限交易,而不是確定您的身份。我會在一分鐘內瞭解它如何工作。


解決您的問題,下面是你需要做什麼:

<%= link_to "Edit Profile", edit_user_path(current_user), class: "btn btn-primary btn-xs", if user_signed_in? && current_user == @user %> 

我猜您是在一個user#show動作,可以使用下面的代碼來調用這個:

#app/controllers/users_controller.rb 
class UsersController < ApplicationController 
    def show 
     @user = User.find params[:id] 
    end 
end 

這意味着,如果你有以下途徑:

#config/routes.rb 
resources :users 

您將可以訪問@usercurrent_user。重要的是要注意current_user!= @user。儘管weezing的回答很簡潔,但它並不驗證用戶是否擁有授權的;只是用戶認證


因此,你有幾種規格:

  1. 你需要知道,如果用戶在
  2. 實際登錄你需要確保你的logged-in用戶有授權編輯配置文件(IE是他們的)

我強烈建議您查看gems的使用,如CanCanCanPundit。我會告訴你CanCanCan:

#app/models/ability.rb 
class Ability 
    include CanCan::Ability 

    def initialize(user) 
     user ||= User.new # guest user (not logged in) 
     can :edit, Article, id: user.id 
    end 
end 

#app/views/users/show.html.erb 
<%= link_to "Edit", edit_user_path(@user) if can? :edit, @user %> 

有一個great resource here

+0

非常感謝豐富。很有幫助。下次我會使用你建議的寶石之一。 – robb

+0

有時候最好自己寫一些東西 - 特別是爲了學習的目的:) – weezing

0

這應該工作(有點簡單):

<% if current_user %> 
    <%= link_to "Edit Profile", edit_user_path(current_user), class: "btn btn-primary btn-xs" %> 
<% end %> 
+0

除非我誤認爲這不是問題所在。這將顯示按鈕,如果用戶登錄。正確的答案是什麼@RichPeck張貼。 – DickieBoy

+0

當然你是對的 – weezing