我有两个活动记录数组。我合并了这两个数组,现在我想根据“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
在你的情况下会返回什么。