使用simple_form选择值的数字范围

hyp*_*jas 1 ruby ruby-on-rails ruby-on-rails-3 simple-form ruby-on-rails-3.1

我有这个选择与simple_form:

<%= f.input :theme, :collection => ["#{t('.text_1')}", "#{t('.text_2')}", "#{t('.text_3')}", "#{t('.text_4')}", :value_method => lambda { |n| n } %>
Run Code Online (Sandbox Code Playgroud)

html是:

<select class="select required" id="inquiry_theme" name="inquiry[theme]"><option value="">Choose a topic related to your query</option>
<option value="Text1">Text1</option>
<option value="Text2">Text2</option>
<option value="Text3">Text3</option>
<option value="Text4">Text4</option>
Run Code Online (Sandbox Code Playgroud)

我想用一个范围数字来设置值而不是文本,例如:

<select class="select required" id="inquiry_theme" name="inquiry[theme]"><option value="">Choose a topic related to your query</option>
<option value="1">Text1</option>
<option value="2">Text2</option>
<option value="3">Text3</option>
<option value="4">Text4</option>
Run Code Online (Sandbox Code Playgroud)

可以使用lambda :value_method吗?

谢谢!

dee*_*our 5

举个例子,我认为使用value_method有点矫枉过正.

<%= f.input :theme, :collection => [[1, "#{t('.text_1')}"], [2, "#{t('.text_2')}"], [3, "#{t('.text_3')}"], [4, "#{t('.text_4')}"]] %>
Run Code Online (Sandbox Code Playgroud)

虽然我写这个

<%= f.input :theme, :collection: (1..4).map { |i| [i, t(".text_#{i}")] }.unshift([nil, 'Choose a topic related to your query'] %>
Run Code Online (Sandbox Code Playgroud)