我知道这可能有点简单,但是我对SQL不太满意,到目前为止我还没看到什么:
我想按“收藏夹”的时间对我的Rails控制器中的帖子进行排序。创建“收藏夹”关系的时间”

这是我尝试的控制器:

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


我错过了什么才能做到这一点?

谢谢,

最佳答案

您需要在最终查询中使用order-by,而不是仅将id提取出来的查询。

如果我没看错您的示例代码,则recent_favourites只是提取一组传递给@user.favorite_posts关联的id ...但这是需要按顺序排序的关联。

也许尝试类似:

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


? (请注意,可能存在错误。如果有的话,我将其保留为您解决问题的练习)

关于mysql - Rails SQL排序帖子(最近收藏),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42637714/

10-13 04:57