最近收藏的Rails SQL排序帖子

时间:2017-03-06 23:48:29

标签: mysql sql ruby-on-rails sorting join

我知道这可能有点简单,但我对SQL并不是很好,到目前为止我还没有看到它的头脑: 我希望在我们的Rails控制器中对帖子进行排序,这些帖子是" favited"即。 "最爱"关系已经创建"

这是我的控制器,我的尝试:

def recent_favorites

  recent_favorites = "SELECT posts.id 
                FROM posts
                JOIN favorites ON favorited_id = posts.id
                GROUP BY posts.id
                ORDER BY favorites.created_at DESC"

  @title = 'Recently Favorited'
  @user = User.friendly.find(params[:id])
  @posts = @user.favorite_posts.where("posts.id IN (#{recent_favorites})")
end

以下是我的表格:

create_table "favorites", force: :cascade do |t|
t.string   "favorited_type"
t.integer  "favorited_id"
t.integer  "user_id"
t.datetime "created_at",     null: false
t.datetime "updated_at",     null: false
t.index ["favorited_type", "favorited_id"], name: "index_favorites_on_favorited_type_and_favorited_id"
t.index ["user_id"], name: "index_favorites_on_user_id"
end

create_table "posts", force: :cascade do |t|
t.string   "post_type"
t.text     "content"
t.string   "body_parts"
t.integer  "duration"
t.text     "equipment"
t.integer  "calories"
t.text     "ingredients"
t.integer  "user_id"
t.datetime "created_at",  null: false
t.datetime "updated_at",  null: false
t.string   "picture"
t.string   "title"
t.integer  "carbs"
t.integer  "fat"
t.integer  "protein"
t.index ["user_id"], name: "index_posts_on_user_id"
end

我想要完成这件事是什么?

谢谢,

1 个答案:

答案 0 :(得分:0)

您需要将order-by放在最终查询上,而不是那个只是拉出ID的那个。

如果我正确地阅读您的示例代码,recent_favourites只会提取一组传递给@user.favorite_posts关联的ID ...但它 需要订单的关联。

也许尝试类似:

  @posts = @user.favorite_posts.where("posts.id IN (#{recent_favorites})").order("favorites.created_at DESC')

? (注意可能有一个错误......如果存在的话,我会把它作为练习留给你解决)