首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby on Rails -在新页面/控制器上显示用户名

Ruby on Rails -在新页面/控制器上显示用户名
EN

Stack Overflow用户
提问于 2018-12-05 08:55:52
回答 2查看 162关注 0票数 0

问题:如何使用新控制器创建新页面来显示数据库中的信息?

因此,我正在创建一个页面,该页面将在一个表中显示用户及其姓名的列表。

我使用以下命令创建了这个新页面:

代码语言:javascript
复制
rails generate controller Information users

并创建了适当的路由。现在,在这个页面的html.erb (users.html.erb)上:

我有:

代码语言:javascript
复制
<h1>Information#users</h1>
<p>Find me in app/views/information/users.html.erb</p>

我想在页面中这样做:

代码语言:javascript
复制
<%= @users.name %>

要显示用户名,请执行以下操作。

我的控制器是:

代码语言:javascript
复制
class InformationController < ApplicationController
  def users
    @current_user = current_user
  end
end

用户方案数据库为:

代码语言:javascript
复制
  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页面在该页面上显示用户信息呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-05 09:44:40

您希望显示用户列表。对于第一个collect all users in users操作,InformationController现在如下所示

代码语言:javascript
复制
class InformationController < ApplicationController
  def users
    @users = User.all
  end
end

现在,在users.html.erb中,您必须遍历每个用户才能将其显示在表中

代码语言:javascript
复制
<h1>Information#users</h1>
<table>
  <tr>
    <th>Username</th>
  </tr>
  <% @users.each do |user| %
    <tr>
      <td><%= user.name %></td>
    <tr>
  <% end %>
</table>  
票数 1
EN

Stack Overflow用户

发布于 2018-12-05 09:38:21

为您的控制器和实例变量选择一个更好的名称

我会非常小心你的命名方案。您的控制器操作称为users,但是您仅显示有关current_user的信息。您的实例变量也是复数形式的,但它应该是单数形式的。

应该是这样的:

代码语言:javascript
复制
<%= @current_user.name %>

然后是这个:

代码语言:javascript
复制
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 ),它应该非常简单。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53623642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档