2015-08-31 2 views
1

Как указать несколько атрибутов из модели в пределах options_from_collection_for_select()?Использование options_from_collection_for_select с несколькими полями

Например, вместо

options_from_collections_for_select(@batches, :id, :name) 

Выведение:

<select ...> 
    <option value="{id}">{name}</option> 
    ... 
</select> 

Я хочу вывести:

<select ...> 
    <option value="{id}">{id}. {name}</option> 
    ... 
</select> 

Из API, я вижу, что он поддерживает еще один параметр " по умолчанию ", но я не хочу по умолчанию. Я хочу использовать id, а также поле name в моей модели batch.

ответ

3

Во-первых, определить метод на вашей модели, как это:

def id_and_name 
    "#{id}. #{name}" 
end 

Затем вы можете сделать

options_from_collections_for_select(@batches, :id, :id_and_name) 
+0

работает как шарм. даже не думал о добавлении метода в модель. Спасибо за это! (я соглашусь, когда таймер для приема заканчивается) – sircapsalot

3

Ну, еще один способ:

options_from_collections_for_select(
    @batches, :id, ->(ob) { "#{ob.id}. #{ob.name}" } 
) 
+0

Я действительно предпочитаю это решение над последним, потому что я буду использовать его только один раз. я бы предпочел не трогать мою модель, и это решение позволяет мне это делать – sircapsalot

+0

@sircapsalot Вы пробовали, и это сработало? –

+0

я сделал. и он делает :) вы догадались? отлично сработано! – sircapsalot

Смежные вопросы