collection_select значения и имена - PullRequest
       3

collection_select значения и имена

0 голосов
/ 08 сентября 2011

Я с трудом нахожу голову, собирая коллекцию, которую я пытаюсь сделать.Немного предыстории: у меня есть вложенная модель, где у меня есть макет, и у каждого макета может быть заданное количество изображений.Как часть ввода, пользователь может решить, какое изображение идет в каком порядке.Это продиктовано значением layout_placement изображения.В настоящее время это работает, layout_placement представляет собой текстовое поле, в которое пользователь может вводить и т. Д.

<%= f.fields_for :images do |builder| %>
  <%= builder.file_field :image %> 
  <%= builder.label :layout_placement %> <%= builder.text_field :layout_placement, :size => 3%>
  <br /><br />
<% end %>

Что мне нужно, так это раскрывающийся список вместо поля простого текста, который позволит мнезначение выбранного layout_placement - оно основано на количестве доступных пробелов (каждый макет отличается и имеет от 2 до 5 слотов изображений).

У меня уже есть поле в макете, называемое image_slots это дает мне количество доступных графических слотов для используемого макета.Поэтому я хочу, чтобы мои доступные параметры варьировались от 1 до количества слотов для изображений.Я пытаюсь сделать что-то вроде этого:

<%= builder.collection_select :layout_placement, 1..@layout.image_slots, ???, ??? %>

И я застреваю на том, что нужно пройти для :id и :name методов.Я попытался упростить и просто использовать select_tag, но в этой области я нахожусь в тупике, так как это вложенная модель, настройки :object#method идут неправильно.

Любая помощь в работе любого из вариантовбудет принята с благодарностью.

1 Ответ

0 голосов
/ 08 сентября 2011

В вашем случае вам на самом деле не нужно использовать collection_select, поскольку вы хотите, чтобы текст и значение ваших опций были одинаковыми (т. Е. 1 .. @ layout.image_slots).Попробуйте это

<%= builder.select :layout_placement, 1..@layout.image_slots %>

В случае, если ваши image_slots могут вернуть nil, просто убедитесь, что вы правильно с этим справляетесь

<%= builder.select :layout_placement, 1..(@layout.image_slots || 1) %>

Чтобы проверить, что значения размещения уникальны, добавьте этоИзображение модели

validates_uniqueness_of :layout_placement, :scope => :layout_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...