【问题标题】:undefined method `order' for []:Array[]:Array 的未定义方法“order”
【发布时间】:2016-05-31 22:02:04
【问题描述】:

我有以下代码,我根据用户是否是管理员为用户加载活动。用户只能看到他们自己的活动源,而管理员可以看到整个流。这是与朋友等共享活动提要的前奏。

  def index
    if current_user?
      @incidents = Incident.find_all_by_user_id(current_user.id).order("created_at desc")
    else
      @incidents = Incident.all.order("created_at desc")
    end
  end

我收到上面提到的错误(undefined method "order" for []:Array)。它似乎是 .order 参考,但我检查了 rails 指南,它似乎是正确的语法。

有什么想法吗?

【问题讨论】:

    标签: sql ruby-on-rails ruby-on-rails-3 methods undefined


    【解决方案1】:

    尝试将find_by... 更改为where,这样:

    def index
        if current_user?
          @incidents = Incident.where(user_id: current_user.id).order("created_at desc")
        else
          @incidents = Incident.all.order("created_at desc")
        end
      end
    

    应该工作:-)

    【讨论】:

      【解决方案2】:

      #index 操作方法可以简化和优化(通过将find_all_by 替换为where)为:

       def index
         clause = current_user? && Incident.where(user_id: current_user.id) || Incident
         @incidents = clause.order("created_at desc")
       end
      

      【讨论】:

      • 一个优雅的解决方案,但对于初学者来说有点复杂。
      • @br3nt 你做了什么改变?
      • @br3nt 对我来说它有过多的语法,并且在语言中并不真正需要......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2013-10-12
      • 2018-10-18
      相关资源
      最近更新 更多