【问题标题】:Rails 3 Join Question for Votes TableRails 3 投票表加入问题
【发布时间】:2011-01-15 08:46:01
【问题描述】:

我有一个表posts 和一个多态表votes

votes 表如下所示:

create_table :votes do |t|
  t.references :user       # user_id
  t.integer    :vote       # the vote value
  t.references :votable    # votable_type and votable_id
end

我想列出用户尚未投票的所有帖子。现在我基本上把他们已经投票过的所有帖子都拿走了,然后从整套帖子中减去。它可以工作,但不是很方便,因为我目前拥有它。

def self.where_not_voted_on_by(user)
  sql = "SELECT P.* FROM posts P LEFT OUTER JOIN ("
  sql << where_voted_on_by(user).to_sql
  sql << ") ALREADY_VOTED_FOR ON P.id = ALREADY_VOTED_FOR.id WHERE (user_id is null)"
  puts sql
  resultset = connection.select_all(sql)
  results = []
  resultset.each do |r|
    results << Post.new(r)
  end
  results
end

def self.where_voted_on_by(user)
  joins(:votes.outer).where("user_id = #{user.id}").select("posts.*, votes.user_id")
end

【问题讨论】:

    标签: sql ruby-on-rails activerecord arel


    【解决方案1】:

    好的,花了我足够长的时间,但答案要简单得多:

    joins(:votes.outer, "AND user_id = #{user.id}").where("votes.vote IS NULL")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      相关资源
      最近更新 更多