mysql - 使用 :has_many associations and multiple conditions 查找

标签 mysql ruby-on-rails ruby ruby-on-rails-3

在我的应用程序中,用户查看我存储在名为“ 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。我认为以下内容会起作用,尽管需要有关 viewusers 关联的具体详细信息:

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/

相关文章:

MySql - 不支持 BLOB/TEXT 列

PHP SQL 查询 2 个日期之间

php - 使用 PHP 在 MySQL 数据库中存储多个复选框数据

mysql - 如何在 rails 范围内编写原始 sql?

mysql - 通过 Rails 中的按钮调用 Controller 方法

ruby-on-rails - Rake RSpec 任务未显示

ruby - 在 Ruby 的控制台中的一行上打印一组数组(每个主数组对象一行)

ruby-on-rails - Ruby 错误 :No Method error. .nil:NilClass 的未定义方法 invitation_type

php - 迁移到 PHP 5.6 : Writing a MySQL wrapper

ruby-on-rails - ruby rails : Searching with a boolean - postgres