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

if statement in ruby loop editing properties

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

下的产品 table

我正在编写一个循环来向当前登录的用户显示所有产品 "belonging",目前看起来是这样。

<% @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,则不会过滤所有 user.id 不为 2 的产品,它只是将每个产品的 product.user_id 更改为 2,因此返回的 table 看起来像这样。

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

如果没有 if 语句,它 returns 具有所有正确属性的完整产品列表。

你应该使用 == 而不是 =:

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

使用比较运算符 == 并且您的 if 语句应该类似于

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

这是您的完整解决方案

<% @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 %>

但是我不知道您的控制器中发生了什么,但是您可以通过在将 @product 实例变量提供给风景。也许尝试这样的查询:

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

编辑 philomor 是正确的。您应该添加与用户有很多关系,请参见下文。

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

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

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

@products = User.find(params[:user_id]).includes(:products).products