为设计用户创建带有 CRUD 操作的管理视图

Posted

技术标签:

【中文标题】为设计用户创建带有 CRUD 操作的管理视图【英文标题】:Creating an Admin view w/ CRUD operations for Devise Users 【发布时间】:2013-08-13 17:46:25 【问题描述】:

我第一次使用带设计的 Rails 4,并尝试为管理员构建一个视图来查找用户和修改用户属性。因此,我为我的 Devise User 模型创建了一个新的布尔属性“admin”。但是,这个问题主要与构建管理员视图有关,因此管理员具有可用于不同用户的 CRUD 操作。

在测试“显示”视图时,尝试显示特定用户的电子邮件地址时出现以下错误:

'nil:NilClass'的未定义方法`email'

我的 admins_controller 如下所示:

 class AdminsController < ApplicationController
  def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.json  render json: @users 
    end
  end

  def show
  end

end

相应的“索引”和“显示”视图如下所示:

'views/admins/index.html.erb'

    <h1>Listing users</h1>

<table>
  <tr>
    <th>User ID</th>
    <th>User Name</th>
    <th>Admin</th>
    <th>First Name</th>
    <th>Last Name</th>
    <th>Address</th>
    <th>City</th>
    <th>State</th>
    <th>Zipcode</th>
  </tr>

<% @users.each do |user| %>
  <tr>
    <td><%= user.id %></td>
    <td><%= user.email %></td>
    <td><%= user.admin %></td>
    <td><%= user.first_name %></td>
    <td><%= user.last_name %></td>
    <td><%= user.address %></td>
    <td><%= user.city %></td>
    <td><%= user.state %></td>
    <td><%= user.zip %></td>
    <td><%= link_to 'Show', user %></td>
  </tr>s
<% end %>
</table>

'views/admins/show.html.erb'

<p id="notice"><%= notice %></p>

<p>
  <strong>Email:</strong>
  <%= @users.email %>
</p>

有人对导致错误的原因有想法吗?

【问题讨论】:

您的路线是什么样的?您也可以将 activeadmin 用于管理内容,它与设计兼容。 谢谢。我一定会检查 activeadmin。关于路线,它们看起来像这样: resources :exams devise_for :users resources :admins 因为它使用'index'作为参数[:id],你的路线看起来很正常。您可能在浏览器 url 中输入了类似 /admins/index 的内容,如果您确实有一个 id=1 的用户,请尝试使用 /admins/1 【参考方案1】:

当您在路由中执行 resources admins 时,#index 操作实际上是 /admins/ 不需要索引。因此,当您执行/admins/index 时,实际上是在考虑您想要转到show 操作,并将index 映射到params[:id]。您可以使用rake routes 查看您生成的所有路由。

【讨论】:

酷,有道理。那么,如何通过 '/admins/' 路由显示所有用户?通过浏览器对“/admins/”执行 GET 时,我收到以下错误“未定义的方法 `user_path' for #:0x007f8d1cba9360>”。它似乎不喜欢管理员索引视图中的 ''。 您所要求的admins/1 实际上是在使用admin_path(id: user.id)。由于您使用resources admins 生成路径列表,包括GET admins/:id,因此可以再次使用rake routes 来查看第一列是您如何编写路由,最后一列是它将是哪个控制器和操作映射到。 无论如何,当您尝试做的是manage user with :id=1 并以admins/1 结束时,您的路线不是很惯用和语义。您可以使用:namespace 来隔离您的管理员控制器。你可以看看rails routing guide。 :) 谢谢!非常有帮助。我正在切换回使用“用户”控制器,并确保只有作为管理员的用户才能访问视图。再次感谢。 没问题。这是一种乐趣。

以上是关于为设计用户创建带有 CRUD 操作的管理视图的主要内容,如果未能解决你的问题,请参考以下文章

7MySQL数据库的视图操作

oracle怎么创建带有sysdba权限用户

centos创建子用户

如何在管理面板中为多行添加带有批量操作(如 CRUD)的复选框 [重复]

电商小程序实战教程-权限设计

电商小程序实战教程-权限设计