2014-10-06 92 views
0

這是我的代碼,用於我的index.html.erb腳手架 ,因爲您可以看到if else會阻止用戶「顯示,編輯或銷燬」 條目。但是,他們可以通過單擊新建 Rotum來創建新的Rota條目。我可以擺脫管理部分顯示,編輯,銷燬和大家將能夠做的一切。但我想要一個用戶能夠 只顯示編輯摧毀他們自己的條目,並不是每個人都太 因爲這是什麼時,我認證用戶做到這一點?Devise gem用戶身份驗證Ruby on Rails

<h1>Listing rota</h1> 

<table id = "tabletest"> 
    <thead> 
    <tr> 
    <th>Name</th> 
    <th>Mobile</th> 
    <th>Email</th> 
    <th>Category</th> 
    <th>Other</th> 
    <th colspan="3"></th> 
    </tr> 
</thead> 

<tbody> 
    <% @rota.each do |rotum| %> 
    <tr> 
    <td><%= rotum.name %></td> 
    <td><%= rotum.mobile %></td> 
    <td><%= rotum.email %></td> 
    <td><%= rotum.category %></td> 
    <td><%= rotum.other %></td> 

<% if current_user.try(:admin?) %> 
    <td><%= link_to 'Show', rotum %></td> 
    <td><%= link_to 'Edit', edit_rotum_path(rotum) %></td> 
    <td><%= link_to 'Destroy', rotum, method: :delete, data: { 
    confirm: 'Are you sure?' } %></td> 
    </tr> 
    <% end %> 
     <% end %> 
</tbody> 
</table> 

<br> 
    <% if user_session %> 
<%= link_to 'New Rotum', new_rotum_path %> 
    <% end %> 

回答

0

假設userrota之間的關係是一個has_many,您的索引控制器應該是:

class RotasController < ApplicationController 
    def index 
    @rota = current_user.rotas 
    end 
end 

current_user是由設計規定的輔助方法,如圖here

0

情況1: 如果您想要顯示用戶在表格中創建的輪迴。

class RotasController < ApplicationController 
    def index 
    @rota = Rota.where(current_user.try(:admin?) ? true : {user_id: current_user.id}) 
    end 
end 

這將獲取所有的記錄管理,如果用戶不是管理員,將取回相關記錄。

並在視圖文件

<tbody> 
    <% @rota.each do |rotum| %> 
    <tr> 
    <td><%= rotum.name %></td> 
    <td><%= rotum.mobile %></td> 
    <td><%= rotum.email %></td> 
    <td><%= rotum.category %></td> 
    <td><%= rotum.other %></td> 

    <td><%= link_to 'Show', rotum %></td> 
    <td><%= link_to 'Edit', edit_rotum_path(rotum) %></td> 
    <td><%= link_to 'Destroy', rotum, method: :delete, data: { 
    confirm: 'Are you sure?' } %></td> 
    </tr> 
<% end %> 

案例2: 在另一種情況下,如果要顯示所有記錄每一個用戶,但用戶可以訪問「節目,編輯,刪除',只有當他創建了那個..然後你需要做別的事情。

class RotasController < ApplicationController 
    def index 
    @rota = Rota.all 
    @is_admin = current_user.try(:admin?) 
    end 
end 

並在視圖

<tbody> 
    <% @rota.each do |rotum| %> 
    <tr> 
    <td><%= rotum.name %></td> 
    <td><%= rotum.mobile %></td> 
    <td><%= rotum.email %></td> 
    <td><%= rotum.category %></td> 
    <td><%= rotum.other %></td> 
    <% if @is_admin || (rotum.user_id == current_user.id) 
     <td><%= link_to 'Show', rotum %></td> 
     <td><%= link_to 'Edit', edit_rotum_path(rotum) %></td> 
     <td><%= link_to 'Destroy', rotum, method: :delete, data: { 
    confirm: 'Are you sure?' } %></td> 
    <% else %> 
     <td colspan='3'> &nbsp; </td> 
    <% end %> 
    </tr> 
<% end %> 

希望,它會爲你工作。 :)

+0

我嘗試這樣做,管理員可以做的一切,但是當用戶跡象,它說,「對於在# NoMethodError /羅塔 未定義的方法'user_ID的」 」 – Rahid 2014-10-09 12:57:00