【问题标题】:Rails SQL sort posts by recently favoritedRails SQL 按最近收藏的帖子排序
【发布时间】:2017-07-27 00:52:29
【问题描述】:

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

完成这项工作我缺少什么?

谢谢你,

【问题讨论】:

  • 您当前的查询有什么问题?我认为你不需要GROUP BY

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


【解决方案1】:

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

如果我没看错您的示例代码,recent_favourites 只会提取一组 id,这些 id 会传递给 @user.favorite_posts 关联...但是 那个 关联需要订购就可以了。

也许可以试试:

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

? (请注意可能存在错误...我将其作为练习留给您修复)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 2011-08-22
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多