日付入力で、携帯に対しては select box でなく input text を表示するコード
Rialsで日付入力に <%= date_select 'table', 'column' %> と書くと、年月日それぞれに select box が作られ便利なのですが、
受け取れるHTMLの大きさに制限のある携帯では、大量に <option>が送られる <select ...> ではなく、年月日 3つの <input type="text" ....>で表示した方が良い場合が多いかもしれません。
そこで、書いてみました。
module ActionView module Helpers module DateHelper def date_select_with_mobile(object_name, method, options = {}) if request.mobile? InstanceTag.new(object_name, method, self, nil, options.delete(:object)).to_date_input_tags(options) else date_select_without_mobile(object_name, method, options) end end alias_method_chain :date_select, :mobile end class InstanceTag def to_date_input_tags(options) value = value(object) ymd = value ? value.strftime("%Y-%m-%d").split('-') : ['','',''] tag_text = '' for i in 1..3 tag_text << %!<input type="text" name="#{@object_name}[#{@method_name}(#{i}i)]" value="#{ymd[i - 1]}" size="#{i == 1 ? 4 : 2}"%> ! end tag_text end end end end
alias_method_chain :date_select, :mobile
と書くと、既存の date_select メソッドが date_select_without_mobile にリネームされ、上で定義した date_select_with_mobile が date_select メソッドとして再定義されます。
- とりあえず動く程度にしか出来ていません ^^;