Rails - 按重要顺序排列",其中"重要"在另一张桌子里

时间:2014-07-29 09:35:17

标签: sql ruby-on-rails

我有一个帖子列表,用户可以将其标记为“重要”。当他列出他们时,我希望重要人物成为第一个,其他所有人都应该在下面。 用户使用另一个名为ImportantPost的模式发布重要信息,该模型属于User并属于Post。问题是我不知道如何在“订单”声明中重新订购具有条件的帖子 - 每个用户都有自己的“重要”帖子列表。

我的模特是:

class Post < ActiveRecord::Base
  has_many :important_posts
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :posts
  has_many :important_posts
end

class ImportantPost < ActiveRecord::Base
  belongs_to :user
  belongs_to :post
end

我在这里编写代码,因为我的实际情况有点困难。 我到目前为止最好的是:

Post.joins(:important_posts).select("post.*, important_posts.user_id = #{current_user.id} as important").order('important')

唯一的东西 - 它只显示标记为重要的帖子。例如,如果完全有3个帖子,但只有一个标记为“重要” - 上面的代码将只返回一个帖子。

UPD

看起来加入左外JOIN解决我的问题...它会导致任何问题吗?我应该使用完全外连接吗?

1 个答案:

答案 0 :(得分:0)

是的,使用outer left join完全解决了我的问题。这是我第一次使用outer join并且它很好!