我目前正在尝试通过使用管理员和用户创建一个网站来习惯 Rails。但是,当在管理仪表板中显示用户列表时,由于某些原因,会出现这些行:
[#
[电子邮件受保护]",password_digest:[已过滤], 创建时间:“2022-08-09 03:47:52.264555000 +0000”,更新时间: “2022-08-09 03:47:52.264555000 +0000”,名字:nil,姓氏:nil, last_change: nil>, # [电子邮件受保护]", 密码摘要:[已过滤],创建时间:“2022-08-19 08:32:37.086901000 +0000",更新时间:"2022-08-19 08:32:37.086901000 +0000",名字:nil,姓氏:nil,last_change:nil>,# [电子邮件受保护]",password_digest:[已过滤],created_at: “2022-08-19 08:32:58.497826000 +0000”,更新时间:“2022-08-19 08:32:58.497826000 +0000",名字:nil,姓氏:nil,last_change: 无>]
这是我用来显示用户列表的代码:
<%= @users.each do |hello| %>
<%= form_with model: @user, url: '/admin/users/delete' do |f| %>
<%= hello.email %>
<%= hidden_field_tag( :id, hello.id) %>
<%=f.submit "Delete"%>
<%end%>
<hr>
<%end%>
这是我得到的显示屏图片: 图片
如果您能提供帮助,我将不胜感激。谢谢!
<%= %>
语法(注意=
)执行ruby代码并将结果打印到您的html中。
这意味着,除了循环之外,
<%= @users.each do |hello| %>
还将把@users
的结果打印到您的html文件中,这就是您看到的奇怪文本。
要解决这个问题,只需更改
<%= @users.each do |hello| %>
到
<% @users.each do |hello| %>
(因此没有
=
符号)。这仍然会执行 ruby 代码,但不会将其返回值传递给您的 html。
更换即可
<%= @users.each do |hello| %>
由
<% @users.each do |hello| %>
这里的问题是
<%= @users.each do |hello| %>
正在打印每个方法的返回值,这是原始的 @users
数组本身。这就是为什么您看到数组打印为 [#<User id: ...>]
。要解决此问题,请将 <%= @users.each do |hello| %>
更改为 <% @users.each do |hello| %>
。
使用
<%= ... %>
会将其中代码的结果输出到视图。由于 .each 返回数组本身,因此将 <%= ... %>
与 @users.each
一起使用会导致打印整个用户数组。通过使用 <% ... %>
,我们可以防止 Rails 尝试渲染每个的输出,而只是按预期迭代用户。