设计gem用户身份验证Ruby on Rails

时间:2014-10-06 12:29:54

标签: html ruby-on-rails ruby devise

这是我的index.html.erb脚手架的代码  正如你可以看到if else阻止用户显示,编辑或销毁"该 条目。但是,他们可以通过单击“新建”创建新的Rota条目 Rotum。我可以摆脱显示,编辑,销毁和管理部分 每个人都能做到一切。但我希望用户能够 只显示编辑摧毁他们的OWN条目而不是每个人都有 因为当我验证用户执行此操作时会发生什么?

 <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 %>

2 个答案:

答案 0 :(得分:0)

假设userrota之间的关系是has_many,您的索引控制器应为:

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

current_user是由Devise定义的辅助方法,如here

所示

答案 1 :(得分:0)

案例1: 如果要显示用户在表中创建的旋转。

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

这里它将获取admin的所有记录,如果用户不是admin,它将获取相关记录。

在视图文件中

<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 %>

希望,它会对你有用。 :)