【问题标题】:Rails .each for db rows containing a certain parameterRails .each 用于包含特定参数的数据库行
【发布时间】:2014-01-07 21:54:19
【问题描述】:

抱歉,如果之前有人问过这个问题,我可能一直在搜索错误的关键字。

我正在尝试对名为users 的数据库表的所有行执行.each 循环,其中name 等于user1。这是怎么做到的?

我的模型 User 有一个数据库表 :users 包含这些列:name | title | details | amount

在我看来,我有这个:

<div style="width:50%;float:left">
<h3>User1</h3>
<% @User1.each do |i| %>
  <p><%= i.title %></p>
  <p><%= i.details %></p>
  <p>$<%= i.amount %></p>
<% end %>
</div>

<div style="width:50%;float:left">
<h3>User2</h3>
  <% @User2.each do |i| %>
  <p><%= i.title %></p>
  <p><%= i.details %></p>
  <p>$<%= i.amount %></p>
<% end %>
</div>

对于我的控制器,我有这个,但它给出了一个错误:

@items = User.all
@User1 = @items.where(name: 'user1')
@User2 = @items.where(name: 'user2')

【问题讨论】:

  • 你忘了问问题。 :) @item 是什么?
  • 抱歉,已编辑。我写错了实例变量。

标签: ruby-on-rails where each params


【解决方案1】:

要遍历与给定列表中的用户匹配的用户数组,请使用

在您的控制器中:

 @users = User.where(name: list_of_names)

list_of_names 是一个字符串数组,

而且,在您看来:

 <% @users.each_with_index do |user, idx| %>
    <div id="user-<%= idx %>">
       <%= user.name %>
       <%= user.details %>
        # etc
    </div>
 <% end %>

等等

请参阅Rails guides 了解更多信息。

【讨论】:

  • 谢谢,但这并不是我想要做的。在视图上,我有 2 列(div)。左列列出了 user1 的所有项目,右列列出了 user2 的所有项目。我想遍历用户模型并在左列过滤循环的内容,以仅列出包含该用户(user1)的 :name 参数的数据库行,反之亦然,在 user2 的右列。
  • 我认为不建议在视图中遍历整个数据库表。在控制器层中提取所需数据并仅将您需要的数据传递给视图会更有效。
  • 我已经针对任意数量的用户修改了上述内容。定位可以通过一些 CSS 来完成。
  • 这太棒了,如果需要,我以后可以扩展它。不幸的是,它似乎将 list_of_names 视为局部变量并给了我一个错误。 #<0x007fed62508230>
【解决方案2】:

@user1 = User.where(name: "name1").first

@user2 = User.where(name: "name2").first

这是你想要的吗?

【讨论】:

  • 这似乎是我正在寻找的东西,但是当我尝试这个并用正确的字符串替换“name1”时,它仍然给我一个错误提示:语法错误,意外'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 2018-08-11
  • 2015-01-14
相关资源
最近更新 更多