我有一个名为Evaluation
的模型。创建evaluation
后,会使用它创建eval_number
。有许多evaluations
具有相同的eval_number
。
以下是一个例子:
- !ruby/object:Evaluation
attributes:
id: 2023
score: 3
created_at: 2013-09-08 13:10:53.000000000 Z
updated_at: 2013-09-08 13:10:53.000000000 Z
student_id: 26
goal_id: 50
eval_number: 33
- !ruby/object:Evaluation
attributes:
id: 2099
score: 4
created_at: 2013-09-08 13:19:12.000000000 Z
updated_at: 2013-09-08 13:19:12.000000000 Z
student_id: 26
goal_id: 36
eval_number: 34
- !ruby/object:Evaluation
attributes:
id: 2100
score: 3
created_at: 2013-09-08 13:19:12.000000000 Z
updated_at: 2013-09-08 13:19:12.000000000 Z
student_id: 26
goal_id: 37
eval_number: 34
- !ruby/object:Evaluation
attributes:
id: 2101
score: 4
created_at: 2013-09-08 13:19:12.000000000 Z
updated_at: 2013-09-08 13:19:12.000000000 Z
student_id: 26
goal_id: 38
eval_number: 34
在视图中,我想显示在表头中创建给定evaluation
的日期。它应该是这样的:
date_1 | date_2 | date_3 | date_4 | etc..
要做到这一点,我需要获得与他们一致的evaluation_numbers
+ created_at
日期。我认为this会有所帮助,但它会使用以下代码返回每eval_number
个不止一条记录:
def eval_date(i)
evals = self.goals.first.evaluations
eval = evals.select("distinct(eval_number), created_at").all[i]
eval.created_at.to_date
end
似乎正在选择不同的eval_number
,但还不同的created_at
列(当然这些都是不同的)。这使得.all[i]
基本无用,因为它正确地找到了[0], [1], [2], etc
元素 - 但是返回的数组中只有i
的给定数量。
我想找到一个不同的eval_number
并仅加载与之相关的created_date
。我想我可以用所有属性加载整个记录,但我不需要它们,所以我宁愿不这样做。
答案 0 :(得分:1)
试试这个:
def eval_date(i)
evals = self.goals.first.evaluations
eval = evals.order("eval_number").group(:eval_number).all[i]
eval.created_at.to_date
end
PS:如果你反复调用eval_date
,那么就像这样缓存评估
def eval_date(i)
@evals ||= self.goals.first.evaluations.order("eval_number").group("eval_number").all
eval = @evals[i]
eval.created_at.to_date
end
答案 1 :(得分:0)
让它像这样工作,但我愿意接受更好的建议:
#student.rb
def eval_date(i)
eval = self.goals.first.evals_by_number.values[i].first
eval.created_at.strftime("%d %b, %Y")
end
#goal.rb
def evals_by_number
self.evaluations.order("eval_number").group_by(&:eval_number)
end