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
我有两个数据库 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