1

これは非常に単純でなければなりませんが、私は答えを見つけようとして頭を壁にぶつけています。以下に示すインスタンス メソッドを使用して、最後に更新されたレコードを検索したいと考えています。

class Subject < ActiveRecord::Base
  has_many :assignments, :dependent => :destroy

  def get_last_assignment_date 
    @last_date = self.assignments.select("date_assigned").last
    @last_day = @last_date.wday
  end

私の割り当てモデルは次のようになります。

create_table "assignments", :force => true do |t|
t.date     "date_assigned"
<snip>

しかし、Rails は get_last_assignment_date に対して次のエラーを返します。

undefined method `wday' for #<Assignment date_assigned: "2012-08-30">

active record が返す値を Ruby が処理できる Time 形式に変換する必要がありますが、方法がわかりません。誰かが私を正しい方向に向けることができれば幸いです。

4

1 に答える 1

1

これ:

self.assignments.select("date_assigned").last

Assigmentオブジェクトではなく、オブジェクトを返しTimeます。

したがって、代わりに:

@last_day = @last_date.wday

あなたがしなければなりません:

@last_day = @last_date.date_assigned.wday

これに気付いているかもしれselect("date_assigned").lastませんが、念のため: では最新の日付が表示されません。使用する必要がありますorder

self.assignments.order(:date_assigned).last

もちろん、最近作成されたオブジェクトが最新のオブジェクトでもある場合、date_assignedそれは問題ではありません。

于 2012-09-04T02:54:24.223 に答える