【问题标题】:Correct this Rails/ruby method for me, please?请为我更正这个 Rails/ruby 方法,好吗?
【发布时间】:2010-01-26 11:06:34
【问题描述】:

我有一个带有 act-as-taggable-on gem 的帖子模型。两个表都有时间戳。

我从

开始
def tags
  @posts = current_user.posts.find_tagged_with(params[:tag], :order => "@posts.tags.updated_at DESC"])
end

当这不起作用时,我尝试改变一些事情并最终导致这个烂摊子。

def tags
  @posts = current_user.posts.find_tagged_with(params[:tag])
  @tags = @posts.tags.all
  @posts = @tags(params[:tag, :order => "@posts.tags.updated_at DESC"])
end

我基本上想按标签上次更新的时间排序。

奖励:按 tag.updated_at 或 post.updated_at 排序,但在这个特定的应用程序中,我将更新标签最多,所以只要第一个就可以了。

感谢任何帮助。

【问题讨论】:

    标签: sql mysql ruby-on-rails


    【解决方案1】:

    您必须在find 语句中加入tags 表:

    def tags
      @posts = Post.find_tagged_with(
        params[:tag], 
        :conditions => {:user_id => current_user.id}, 
        :joins => :tags, 
        :order => 'tags.updated_at DESC',
        :group => 'posts.id'
      )
    end
    

    注意:找到正确的条件以仅选择当前用户的帖子。不过,这个例子可以工作。

    【讨论】:

    • 恐怕不行。它仍然按 Post.updated_at 排序。我希望它按 Tag.updated_by 排序。但是,如果仅从 current_user 获取帖子。
    • 对不起,我误解了这个问题。编辑后的版本应该可以做到。
    • 嗯......仍然没有,更糟糕的是,它显示了 4 次相同的结果。我将 DESC 更改为 ASC 并且仍然是相同的顺序。如果有帮助,我将使用此 github.com/mbleigh/acts-as-taggable-on 作为标签。
    • 啊,好吧,你需要对join操作的结果进行分组,因为一个帖子上显然有多个标签。我再次编辑以反映这一点。不过,不知道订购问题。
    猜你喜欢
    • 2011-01-05
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多