我有一个帖子列表,用户可以将其标记为“重要”。当他列出他们时,我希望重要人物成为第一个,其他所有人都应该在下面。 用户使用另一个名为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解决我的问题...它会导致任何问题吗?我应该使用完全外连接吗?
答案 0 :(得分:0)
是的,使用outer left join
完全解决了我的问题。这是我第一次使用outer join
并且它很好!