2012-01-04 4 views
1

私はすでにテキストフィールドを使用してrailscastを見た後、これについて同様の質問をしました.-ライアンはバーチャルアトリビュートを使用することを推奨します。私はそうのように私の編集ビューでこれを含まれているバーチャルアトリビュート付きテキストフィールドの日付

attr_accessible :title, :description, :start, :start_string 

def start_string 
    unless start.nil? 
    start.to_s(:db) 
    end 
end 

def start_string(start_str) 
    self.start = Date.parse(start_str) 
rescue ArgumentError 
    @start_invalid = true 
end 

def validate 
    errors.add(:start, "is invalid") if @start_invalid 
end 

私はそうのような仮想属性で私のモデルを設定しているが

<div class="field"> 
     <%= f.label :start_string %> <br /> 
     <%= f.text_field :start_string %> 
     <%#= f.date_select(:start, :order => [:month, :day, :year], :end_year => Time.now.year + 10) %> 
    </div> 

、私はロード時のエラーを取得します私の編集フォーム

wrong number of arguments (0 for 1) 

これは非常に古いrailscastと誰かのイベントのコメントです:

「あなたがnilを追加するとRaynが言いましたか? 「!それは罰金wotkすべきゲッターメソッドに

番号をチェックコードは、今日使用するために古くなっている。今

これを行うには、より効率的な方法 がありますので、これを実行するための適切な方法は何ですか今なのか?それを行うには、簡単でまっすぐな方法のように思える...私はエラーを取得していなかった場合は!

答えて

1

あなたの第二の方法はdef start_string=(start_str)する必要があります(あなたは等号不足している)。

+0

ずさんなずさんな - それは私のためにキャッチするためにありがとう。しかし、何らかの理由でTime.parse(star t_str)は、2013年3月30日のように日付入力を拒否し、2013年12月1日と2013年1月12日と解釈します - Time.parseまたはDate.parseは標準的なアメリカの方法で入力を処理しませんか? – Rapture

+0

おそらく私はChronic's Parseメソッドが必要でしょうか? – Rapture

+1

いいえ、Rubyの日本の起源(日/月/年の形式)のため、いつもそうするでしょう。 [Chronic](http://chronic.rubyforge.org/)のようなものを使って、Chronic.parse(start_str)を実行させることができます。それ以外の場合は、必要な処理を行うために 'Date.parse'をオーバーライドするか、カスタムメソッドを作成して呼び出す必要があります。 –

関連する問題