我知道这可能有点简单,但我对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
我想要完成这件事是什么?
谢谢,
答案 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')
? (注意可能有一个错误......如果存在的话,我会把它作为练习留给你解决)