问题:如何使用新控制器创建新页面来显示数据库中的信息?
因此,我正在创建一个页面,该页面将在一个表中显示用户及其姓名的列表。
我使用以下命令创建了这个新页面:
rails generate controller Information users
并创建了适当的路由。现在,在这个页面的html.erb (users.html.erb)上:
我有:
<h1>Information#users</h1>
<p>Find me in app/views/information/users.html.erb</p>
我想在页面中这样做:
<%= @users.name %>
要显示用户名,请执行以下操作。
我的控制器是:
class InformationController < ApplicationController
def users
@current_user = current_user
end
end
用户方案数据库为:
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "phone_number"
t.string "name"
end
那么,我应该怎么做才能让users.html.erb页面在该页面上显示用户信息呢?
发布于 2018-12-05 09:44:40
您希望显示用户列表。对于第一个collect all users in users
操作,InformationController
现在如下所示
class InformationController < ApplicationController
def users
@users = User.all
end
end
现在,在users.html.erb
中,您必须遍历每个用户才能将其显示在表中
<h1>Information#users</h1>
<table>
<tr>
<th>Username</th>
</tr>
<% @users.each do |user| %
<tr>
<td><%= user.name %></td>
<tr>
<% end %>
</table>
发布于 2018-12-05 09:38:21
为您的控制器和实例变量选择一个更好的名称
我会非常小心你的命名方案。您的控制器操作称为users
,但是您仅显示有关current_user
的信息。您的实例变量也是复数形式的,但它应该是单数形式的。
应该是这样的:
<%= @current_user.name %>
然后是这个:
class InformationController < ApplicationController
def users
@current_user = current_user # should work if you are using the devise gem
end
end
注意Re:限制应用程序中外部依赖项的感染
如果您使用的是devise
gem,它有一个非常方便的帮助器方法,名为current_user
,就像您指定的那样。如上所述将其设置为实例变量,并在整个视图中使用@current_user
变量。为什么?在开始你的rails编程生涯时,出于学术和理论上的原因: devise是一个外部依赖- gem可能会改变current_user
助手方法的工作或操作方式,它可能会将其名称更改为其他名称。如果发生这种情况,您将希望限制对您的rails应用程序的任何负面影响。您需要做的唯一更改是在这行@current_user = current user # i.e. the devise helper method
的控制器中,而不是在视图中,如果您在所有地方都使用了current_user
,就会发生这种情况。诚然,这种变化是微小的,但这是一个你需要意识到你正在做出的决定,而不是被动地做出它。
摘要:使用devise gem (可能是目前最流行的身份验证gem ),它应该非常简单。
https://stackoverflow.com/questions/53623642
复制相似问题