Rails простые константы и выбор параметров - PullRequest
1 голос
/ 16 августа 2010

В моей модели Inquire.rb есть простая константа с именем "subject", и мне хотелось бы знать, есть ли простой способ использовать позицию в массиве Ruby, а не создавать из нее хеш с идентификаторами или более массив.

Могу ли я сделать это?

т.е. вместо to_s, как это происходит в настоящее время для значения в выборе, я бы хотел целое число, указывающее позицию вопроса в массиве. 1-5 в этом случае.

Спасибо

  SUBJECTS = [ "I have a query about my booking", 
               "I can't find my confirmation email", 
               "I have feedback about a location",
               "I have feedback about your website", 
               "Other enquiry" ]

<%= f.collection_select :subject, Inquire::SUBJECTS, :to_s, :titleize, {:prompt => true} %>

Ответы [ 3 ]

2 голосов
/ 16 августа 2010

Или вы можете использовать метод enum_with_index, доступный вам через Enumerable.

<%= f.select :name, Inquire::SUBJECTS.enum_with_index.collect { |s, i| [s.titleize, i] }, {:prompt=>true} %>
2 голосов
/ 16 августа 2010

Вы можете сделать что-то вроде этого

<%= select(:inquire, :subject_id, 
      Inquire::SUBJECTS.collect {|x| [x, Inquire::SUBJECTS.index(x) + 1] }) 
%>    

Это приводит к следующему HTML

<select id="inquire_subject_id" name="inquire[subject_id]">
  <option value="1">I have a query about my booking</option> 
  <option value="2">I can't find my confirmation email</option> 
  <option value="3">I have feedback about a location</option> 
  <option value="4">I have feedback about your website</option> 
  <option value="5">Other enquiry</option>
</select> 
0 голосов
/ 16 августа 2010

Вам просто нужен маленький помощник, чтобы сделать работу за вас. так же, как это встроенный помощник - http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html

module form_collection_helper
  def options_with_index_for_select(items)
      html = ''
      items.each_with_index { |item, i|  html << "<option value='#{i}'>#{item.titleize}</option>" }
      return html
  end
end

и в вашем коде будет просто:

<%= f.select :subject, options_with_index_for_select(Inquire::SUBJECTS), {:prompt => true} %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...