我有两个数据库表,用户和产品 当用户创建产品时,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语句,它将返回包含所有正确属性的完整产品列表。
答案 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 %>