为设计用户创建带有 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 操作的管理视图的主要内容,如果未能解决你的问题,请参考以下文章