我知道这可能有点简单,但是我对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/