我有两个活动记录数组。我合并了这两个数组,现在我想根据“updated_at”字段对它们进行排序。

@notification_challenges=Challenge.where("to_id=? and activity_id=?" ,current_user.id,@activity.id)
@match_results=[]
@notification_challenges.each do |k|
@match_results=@match_results<<MatchResult.where("challenge_id=? and result_confirmation_status=?" ,k.id,1)
end

if !@match_results.blank?
  @notifications=@notifications+@match_results
end

if !@notification_challenges.blank?
        @notifications=@notifications+@notification_challenges
end

if [email protected]?
      @notifications2=(@notifications).sort_by(&:updated_at)
      @[email protected]
end

但它给出了以下错误:
undefined method `updated_at' for #<MatchResult::ActiveRecord_Relation:0x0000000232e608>


@notifications=(@match_results+@notification_challenges).sort_by(&:updated_at)

工作正常。
但我想检查@match_results或@notification_challenges是否为空,所以我将合并这两个数组,然后应用“sort_by”函数。

最佳答案

MatchResult在您的示例中可能返回一个MatchResult对象,其中包含一个记录数组,因此当您将MatchResult添加到第一个数组时,您将得到如下结果:
[a, b, c, MatchResult[d, e, f]]
其中,该数组中的第四个元素是没有MatchResult属性或方法的update_at对象。
您可以尝试循环MatchResult中的结果,并将每个结果推入第一个数组:

results = MatchResult.where("challenge_id=? and result_confirmation_status=?" ,k.id,1)
@match_results = results.map{|c| @match_results << c}

只是个主意,因为我不确定MatchResult在你的情况下会返回什么。

10-04 10:59