在我的应用程序中,用户查看我存储在名为View的单独关联表中的Pins。该表具有ID,pin_id,user_id和排名。我想找到符合用户尚未看到的某些标准的针脚。我正在使用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])
我认为使用连接使用单个数据库查询来拉取对象会更优雅。但是,我无法让这个工作。我已经阅读了一些不同的SO文章,但我无法使用单个查询重现上述内容。我是否认为以上是迂回的并且有更好的方法?
答案 0 :(得分:1)
您应该能够pins
加入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])
答案 1 :(得分:0)
尝试尖叫它比普通的有效记录查询方法更好,更好,并为您提供更强大的功能
答案 2 :(得分:0)
你可以这样做:
Pin.joins(:views).where(sex: sex, active: b).
merge(View.where(View.arel_table[:user_id].not_eq(current_user.id))).first