【发布时间】:2015-11-10 20:58:20
【问题描述】:
我有这些表:
-
users- 经典的设计桌 -
listings- 用户创建列表 -
listings_exclude_users- 2 列:user_id和listing_id
用户.rb
class User
has_many :listings
end
listing.rb
class Listing
belongs_to :user
has_many :listing_excluded_users
end
listing_excluded_user.rb
class ListingExcludedUser
belongs_to :user
belongs_to :listing
end
我标记了一些不应该显示相应列表的用户,并且此信息保存在listings_exclude_users。
现在我想运行一个可以获取所有列表的查询,但如果在特定列表的listings_exclude_users 表中的用户登录,则不要获取此列表。
我可以在视图中执行此操作,但我更喜欢 ActiveRecord 方式。 我试过了
@listings = Listing.joins(:listing_excluded_users).where("listings.status='0' AND (listing_excluded_users.user_id != '#{current_user.id}')")
但是这个查询没有返回任何东西(空@listings)。
提前感谢您的建议。
【问题讨论】:
-
您使用的是什么数据库? mysql? postgres?
-
永远不要在 SQL 片段中执行类似“...#{varname}”的操作。也许这次你是安全的,但有一天你会得到 SQL 注入。您应该学习如何在 SQL 语句中使用参数。
-
在这种情况下,#{current_user.id} 是安全的,因为它可能不是用户输入,但是,是的,使用参数的好习惯,因为我已经重写了下面的查询。
标签: ruby-on-rails ruby activerecord has-many