それで、私は問題を解決することになりました、以下は完全な解決策です。私が理解している限り、私はRails 2.3を使用しているので、data
プレフィックス付きの属性をサポートするヘルパーはありません。この回答options_for_select
で指摘されているように、Rails3ヘルパーを使用する必要があることがわかりました。ちなみに、msDropDownプラグインを使用する代わりに、ddSlickを使用することになりました。また、を使用する代わりに、を使用しました。次に、基本的にあなたが持っている必要があるものは次のとおりです。collection_select
select_tag
rails_overrides.rb
# https://stackoverflow.com/a/13962481/914874
module RailsOverrides
def options_for_select(container, selected = nil)
return container if String === container
container = container.to_a if Hash === container
selected, disabled = extract_selected_and_disabled(selected)
options_for_select = container.inject([]) do |options, element|
html_attributes = option_html_attributes(element)
text, value = option_text_and_value(element)
selected_attribute = ' selected="selected"' if option_value_selected?(value, selected)
disabled_attribute = ' disabled="disabled"' if disabled && option_value_selected?(value, disabled)
options << %(<option value="#{html_escape(value.to_s)}"#{selected_attribute}#{disabled_attribute}#{html_attributes}>#{html_escape(text.to_s)}</option>)
end
options_for_select.join("\n").html_safe
end
def option_text_and_value(option)
# Options are [text, value] pairs or strings used for both.
case
when Array === option
option = option.reject { |e| Hash === e }
[option.first, option.last]
when !option.is_a?(String) && option.respond_to?(:first) && option.respond_to?(:last)
[option.first, option.last]
else
[option, option]
end
end
def option_html_attributes(element)
return "" unless Array === element
html_attributes = []
element.select { |e| Hash === e }.reduce({}, :merge).each do |k, v|
html_attributes << " #{k}=\"#{ERB::Util.html_escape(v.to_s)}\""
end
html_attributes.join
end
end
application_helper.rb
module ApplicationHelper
include RailsOverrides
end
index.html.erb
<%= select_tag(:state, options_for_select (states.map { |state| [state.name, state.code, {"data-imagesrc" => image_path("flags/#{state.code}.png"), "data-description" => "Data from #{state.name}"}]}, current_state.code)) %>
ここでcurrent_state
、デフォルトオプションとして選択される状態です。たとえば、私はそれをsession
変数に格納しますが、簡単にするために、それはである可能性があり@current_state
ます。
これを解決する別の方法は、 options_from_collection_for_select_with_dataの変更バージョンを使用して、を公開する必要がないようにすることmap
です。