Rails collection_select vs. select
collection_select
и select
Помощники Rails: Какой я должен использовать?
Я не вижу разницы в обоих направлениях. Оба помощника берут коллекцию и генерируют теги опций внутри тега select. Есть ли сценарий, где collection_select
лучше, чем select
? или что-то я здесь не хватает?
Ответы
Ответ 1
collection_select
предназначен для использования, когда список элементов представляет собой массив объектов ActiveRecord. collection_select
построен на вершине select
, поэтому это удобный метод, когда вам нужно отобразить коллекцию объектов, а не массив строк.
collection_select(:post, :author_id, Author.find(:all), :id, :name)
Ответ 2
Я что-то написал на этом некоторое время назад, взгляните на
http://nasir.wordpress.com/2007/11/02/not-binding-your-selection-list-to-a-particular-model-in-rails/
Надеюсь, что поможет
Ответ 3
И в отношении select
вы можете использовать его с Hash. Я использовал его с ENUM.
# In a hypothetical Fruit model
enum types: { 'Banana' => 0, 'Grape' => 1, 'Mango' => 2 }
# In the view
f.select :type, Fruits.types.invert
Обратите внимание, что мне нужно было использовать инвертировать, чтобы показать правильное значение в опции:
<select>
<option value="0">Banana</option>
<option value="1">Grape<option>
<option value="2">Mango</option>
</select>
Чтобы ссылаться на него в файле show, вы можете использовать Fruit.types
, и это вернет наш предыдущий хэш. Таким образом вы можете:
Fruit.types[obj.type]
Последнее примечание: Вы можете использовать символы вместо цифр, если вы предпочитаете enum types: { 'Banana' => :banana, ...
, и вы получите <option value="banana">Banana</option>