Rails 3 выпадающего списка выбора? - PullRequest
7 голосов
/ 09 марта 2012

Я работаю над простым приложением для интрасети, созданным с помощью Rails 3.1.

У меня есть модель для ссылок, которая имеет следующие поля:

name:string
url:string
colour:string

Я поместил атрибут цвета вкласс в представлении, например, так:

<a href="linkaddress" class="<%= link.colour %>">Link Name</a>

На данный момент в новой форме ссылки у меня просто ввод простой формы, в которой пользователь может вводить что угодно, и он станет классом href, как и ожидалось.

То, что я хотел бы сделать, - это создать выпадающий список предустановленных опций, это просто красный, зеленый и синий (в качестве примера).Поскольку это кажется довольно простым, я не думаю, что есть необходимость в помощнике.

Я прочитал несколько других вопросов и ответов по SO, и они, кажется, показывают примеры, где у вас есть имя, за которым следуетИдентификационный номер.Я просто хочу получить код ниже:

<select name="colour">
 <option value="red">Red</option>
 <option value="green">Green</option>
 <option value="blue">Blue</option>
</select>

Я уверен, что это просто, но я не могу разобраться с этим.Я прочитал информацию по Rails API, и select_for_tag сбил меня с толку!

Ответы [ 3 ]

13 голосов
/ 09 марта 2012

Просто используйте стандартный элемент select в вашей форме, чтобы установить переменную цвета:

<%= f.select :colour, options_for_select([["Red", "red"], ["Green", "green"]], @link.colour) %>
4 голосов
/ 09 марта 2012

Где Color - это название вашей модели для ваших цветов, а f - это объект конструктора форм:

 <%= f.collection_select :colour, Colour.all, :url, :name %>

Это был бы самый простой и простой способ получить выборку с URL-адресом цвета в качествезначение и имя как текст.Если вам нужно как имя для значения, так и текст, вы также можете изменить: url на: name.

Кроме того, для семантики вы, вероятно, также захотите установить коллекцию @colours в своем контроллере и использовать ее, а не вызывать модель из своего представления (вместо Colour.all).*

ОБНОВЛЕНИЕ: на основании вашего комментария ниже, и если у вас нет модели для коллекции и вы просто хотите жестко закодировать свой выбор и значения, попробуйте:

 <%= select :your_obj, :linkaddress, [["Red","red"],["Green", "green"],["Blue", "blue"]] %>
3 голосов
/ 09 марта 2012

Вы хотите использовать помощник по рельсам, потому что тогда рельсы позаботятся о перемещении данных в вашу модель. так что вы, скорее всего, хотите что-то вроде следующего.

<%= f.select :colour, ["red","green","blue"] %>

Эта страница может быть немного многословной, но она может помочь вам подумать об этом.

...