0

というモデルがあり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日付を取得する必要があります。これが役立つと思いましたが、次のeval_numberコードで1 つ以上のレコードが返されます。

  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個別の s が選択されているようですが、個別の列created_at選択されているようです(もちろんすべて異なります)。これにより、要素が正しく.all[i]検出されるため、基本的には役に立たなくなりますが、返された配列には 、指定された[0], [1], [2], etc数よりもはるかに多くの要素があります。i

eval_number個別のものを見つけて、それに付随するものだけをロードしたいcreated_date。レコード全体をすべての属性でロードできると思いますが、それらは必要ないので、むしろそうしたくありません。

4

2 に答える 2

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
于 2013-09-30T06:26:25.337 に答える