Как получить значение строки метки из поля :select в formtastic

У меня есть следующее в частичном приложении Rails 3.2, использующем formtastic gem

<%= f.semantic_fields_for :bucket do |bucket| %>
                       <%= bucket.inputs do %>
                               <%= bucket.input :bucket_name, :collection => @buckets,
                               :include_blank => false %>
                               <%= bucket.input :sub_directory, :collection =>
@buckets.first.paths,
                               :include_blank => false %>
                       <% end %>
               <% end %>

прямо сейчас в моем контроллере я могу получить :bucket_name, и значение равно == целому числу. В моем случае у меня есть только один элемент в моей коллекции, но он дает мне значение 2. Я предполагаю, что это значение идентификатора объект.

важно, чтобы я получил фактическое строковое значение :name объекта, выбранного в коллекции. Я не знаю, как это сделать. допустим, элемент, который я выбираю, имеет метку «моя метка» и является третьим элементом в коллекции. как мне получить значение «мой ярлык».


person mattwallace    schedule 19.02.2012    source источник


Ответы (2)


По умолчанию выбранные входные данные будут использовать атрибут id модели в качестве атрибута value тегов <option>, и он связывает различные методы объекта для содержимого тега option, такого как to_label, name и to_s.

Вы можете изменить оба параметра с помощью параметров :member_value и :member_label соответственно (в более старых версиях они назывались :value_method и :label_method).

Подробная информация о каждой опции находится в документации для выбора ввода, которую, я полагаю, вы не смотрели :)

http://rdoc.info/github/justinfrench/formtastic/Formtastic/Inputs/SelectInput

person Justin French    schedule 19.02.2012
comment
Кажется, что доступ к объекту в БД с использованием значения, переданного из меню выбора, делает свое дело. Мне так и не удалось передать фактическое значение метки. хотелось бы увидеть пример, если у вас есть. - person mattwallace; 20.02.2012

:member_value и :member_label устарели, начиная с версии 3 Formtastic.

Самый простой способ - изменить коллекцию, переданную на вход. См. пример на странице formtastic github.

 f.input :author,  :as => :select,      :collection => Author.pluck(:first_name, :id)

Здесь first_name — это метка, а id — это значение для параметров выбора.

person ianpetzer    schedule 27.03.2015