0

私はこれを間違っていると確信しています。誰かが私を正しい方向に向けることができますか?

effective_date の値を変更された形式の日付に設定する必要があります

effective_dateRequestの属性です

class Request < ActiveRecord::Base

  def format_date=(format_date)
    date_a = format_date.split("/")
    month, day, year = date_a
    effective_date = Date.parse("#{year}-#{month}-#{day}")
  end

  def format_date
    effective_date
  end
end

Request.create(format_date: "04/21/2012")値を effect_date に設定していません

編集:これは意味をなさないと思うので、もっとよく説明しようとします:

effective_date (データベースの列) の値を format_date (データベースの列ではない) から設定する必要があります。format_date メソッドを使用して、日付を format_date から変換し、有効な日付に保存しています。これで十分な情報が得られない場合は、お知らせください。他に何を追加すればよいかわかりません。

4

2 に答える 2

2

effective_dateがデータベースの列名である場合、変更は次のように簡単です。

def format_date=(format_date)
  date_a = format_date.split("/")
  month, day, year = date_a
  self.effective_date = Date.parse("#{year}-#{month}-#{day}")
end

唯一の変更点effective_date =self.effective_date =. selfそこに追加しないと、呼び出されるローカル変数を設定するかeffective_date、メソッドを呼び出すかをインタープリターが知る方法はありませんeffective_date=。ローカル変数を想定しています。

于 2012-05-01T22:11:27.573 に答える
1

属性がテーブルにない場合effective_dateは、インスタンス変数が必要だと思います。

class Request < AR::Base
  ...
  def format_date=(f_date)
    ...
    @effective_date = Date.parse("#{year}-#{month}-#{day}")
  end

  def format_date
    @effective_date
  end
end

また、ローカル変数をメソッド名(format_date)として使うのも良くないので、ここは間違いではありませんが誤解を招きやすいです。

更新: ここで仮想属性の詳細を確認できます。

http://railscasts.com/episodes/16-virtual-attributes?view=asciicast

http://railscasts.com/episodes/167-more-on-virtual-attributes

于 2012-05-01T20:25:41.913 に答える