2009-06-01 10 views
7

私は毎週開催される定期的なイベントを持つプロジェクトに取り組んでいます。したがって、私はいくつかのDateTimeフィールドを非伝統的な方法で使用します。私が取り組んでいるのはFormBuilderで、平日の選択と時間の選択を出力するフィールドを作成します。それが動作するので、私は、私がオンラインで見つける12時間対応のプラグインを使用しています:Rails Formbuilder質問

class ActionView::Helpers::FormBuilder 
    def dow_time(dow,time,options={}) 
    rval = select(dow, DateTime::DAYNAMES) 
    rval += time_select(time, {:minute_step => 15, :ignore_date => false, :twelve_hour => true}) 
    end 
end 

私がいる問題は、セレクト平日が実際にデフォルト選択された値を持っていないことです。これは私の作成ページではうまく動作しますが、編集ページではうまく動作しません。 dowは、曜日の文字列が "Monday"、 "Tuesday"などの呼び出しモデルのフィールドを参照するシンボルです。dowを使用して呼び出しモデルからその値を引き出す方法を教えてください。

self[dow] 

これは別のクラスのため動作しません。

アイデア?何か違います?

答えて

13

あなたはFormBuilderの中にいる場合は、単に「オブジェクトの変数を使って、現在のオブジェクトにアクセスすることができます。

例:

に:あなたはform_forを呼び出すときに、あなたのFormBuilder

def custom_datetime_select(field, options = {}) 
    start_time = object.send(field) 
    ... 
end 

両方objectobject_nameでedit.html.erb

<% form_for(@event) do |form| %> 
    <%= form.custom_datetime_select(:event_starts_at) %> 
<% end %> 

はあなたのために設定されています。

詳細はactionpack/lib/action_view/helpers/form_helper.rbを参照してください。

+0

あなたが勝つ、それは私が探しているものです。ありがとう! –

0

これはあなたのために働く必要があります...

class ActionView::Helpers::FormBuilder 
    def dow_time(dow_model, time, options={}) 
    rval = select(dowmodel, :dow, DateTime::DAYNAMES) 
    rval += time_select(time, {:minute_step => 15, :ignore_date => false, :twelve_hour => true}) 
    end 
end 
+0

self.read_attributeはで失敗します。#ため 未定義のメソッド 'read_attribute」 "modelinstance" モデルは可変であるため、動作しない、または多分私は誤解してる何あなたは言っている。 –

+0

私はコードを編集しました。 <%= dow_time(@mymodel、time、etc ...)%> –

+0

多くの助けがありました!ありがとう。 :) –