在我的应用程序中,用户查看我存储在名为“ View ”的单独关联表中的引脚。该表具有 ID、pin_id、user_id 和等级。我想找到符合用户未见过的某些标准的 Pin 图。我正在使用 Rails 3.2.13。
这是我的模型关联:
class Pin
has_many :views
has_many :users, :through => :views
class View
belongs_to :pin
belongs_to :user
class User
has_many :pins
has_many :views
has_many :pins, :through => :views
现在我正在这样做,它有效:
pins_controller.rb
b = TRUE
sex = current_user.sex
views = current_user.views
seen = views.map(&:pin_id)
@pins = Pin.find(:first, :conditions => ["sex = ? AND active = ? AND id not in (?)", sex, b, seen])
我认为使用联接来使用单个数据库查询来提取对象会更优雅。但是,我无法让它发挥作用。我读过很多不同的文章,但我无法使用单个查询重现上述内容。我认为上面的方法是迂回的并且有更好的方法是正确的吗?
最佳答案
您应该能够将 pin
连接到 view
并将 view
连接到 users
。我认为以下内容会起作用,尽管需要有关 view
与 users
关联的具体详细信息:
Pin.joins(:views => :user).where("views.sex = ? and views.active = ? and users.id not in (?)", current_user.sex, true, [current_user.id])
关于mysql - 使用 :has_many associations and multiple conditions 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22135542/