在页面上显示用户投票类型(赞成/反对/弃权)的最佳方法是什么?
直接查询是

SELECT vote_type FROM votes WHERE post_id = 888 AND user_id = 888

有轨直达
post.votes.where(:user_id => current_user.id).pluck(:vote_type).first

但是为每一篇文章都进行数据库查询太重太愚蠢了。
我可以建立posts-id数组并进行一次查询
@posts.each do |post|
  ids << post.id
end
votes = Vote.select(:post_id, :vote_type).where(:user_id => current_user.id, :post_id => ids)

SELECT post_id, vote_type FROM votes WHERE user_id = 888 AND post_id IN (887, 888, 889)

rails中有内置的“magick”方法吗?我用postgresql。
升级版
+1个相同的写入方法
current_user.votes.find_by_post_id(post.id)

上浮2
Dummy-table on pastebin

最佳答案

怎么样

votes = Post.
  joins(:user).
  joins("LEFT JOIN votes ON votes.post_id = posts.id AND votes.user_id = 1").
  select("posts.id, posts.title, users.id AS users_id, votes.vote_type")

用一个
votes.map {|p| [p.id, p.title, p.users_id, p.vote_type] }

我明白了
[[1, "Say hello", 1, nil], [2, "Amazing world", 2, 1]]

07-24 09:47
查看更多