在ruby循环编辑属性中的if语句

时间:2016-10-17 01:37:26

标签: ruby-on-rails ruby ruby-on-rails-5

我有两个数据库表,用户和产品 当用户创建产品时,user.id将被放置在product.user_id

下的product表中

我正在编写一个循环来显示所有产品"属于"对于当前登录的用户,到目前为止看起来像这样。

<% @product.each do |p| %>
 <% if product.user_id = user.id %>
 <tr>
    <td><%= user.id %></td>
    <td><%= product.user_id %></td>
    <td><%= product.id %></td>
    <td><%= product.name %></td>
</tr>
  <% end %>
<% end %>

如果当前登录的用户是用户2,而不是过滤所有不具有2的user.id的产品,则只需将每个产品的product.user_id更改为2,以便返回的表看起来像这样。

2 2 1
2 2 2
2 2 3
2 2 4

如果没有if语句,它将返回包含所有正确属性的完整产品列表。

3 个答案:

答案 0 :(得分:2)

您应该使用==而不是=

<% if product.user_id == user.id %>

答案 1 :(得分:1)

这是您的完整解决方案

<% @product.each do |p| %>
 <% if p.user_id == user.id %>
 <tr>
    <td><%= user.id %></td>
    <td><%= p.user_id %></td>
    <td><%= p.id %></td>
    <td><%= p.name %></td>
</tr>
  <% end %>
<% end %>

但是,我不知道你的控制器发生了什么,但你可以通过在服务器{{1}之前过滤掉控制器中当前用户的产品来节省大量的精力。实例变量到视图。也许尝试这样的查询:

@product

修改 philomor是对的。你应该在用户上添加一个有很多关系,见下文。

user_id = current_user.id #assuming you have access to a method like this
@product = Product.where(user_id: user_id)

然而,并不是说你有这种关系,你想要小心,当你打电话给它时,你不会导致N+1 query。要避免这种情况,请在获取所有用户的产品时执行以下操作

#app/models/user.rb
class User < ActiveRecord::Base
  has_many :products
end

#app/models/product.rb
class Product < ActiveRecord::Base
  belongs_to :user
end

答案 2 :(得分:-1)

使用比较运算符==,if语句应该类似于

<% if p.user_id = user.id %>