2010-11-19 4 views
7

Если это ответили, прежде чем я не смогу его найти., используя значение capize.select

У меня есть следующий:

= f.collection_select :sex_id, @sexes, :id, :name 

и это в контроллере:

@sexes = Sex.all 

полы все хранятся в нижнем регистре, например:

id|name 
1|steer 
2|heifer 
3|holstein 

мне нужно для вывода с использованием капитала Первые буквы:

Steer 
Heifer 
Holstein 

Я пробовал:

= f.collection_select :sex_id, @sexes, :id, :name.capitalize 
= f.collection_select :sex_id, @sexes, 'id', 'name'.capitalize 

, но они не работают, и я не ожидал их, но должен был попробовать их, прежде чем отправлять это.

+1

Висконсините во мне спрашивает, почему вы смешиваете двух полов с породой. Данные бесполезны! ;-) – Tass

+1

Моя компания такая странная, но здорово работать в индустрии, где вы можете иметь «животный секс» в базе данных, и никто не думает, что вы его потеряли. –

ответ

6

collection_select вызывает метод на каждом объекте, чтобы получить текст для значения параметра. Вы можете добавить новый метод в модели, чтобы получить правильное значение:

def name_for_select 
    name.capitalize 
end 

затем в виде:

= f.collection_select :sex_id, @sexes, :id, :name_for_select 
+0

Большое спасибо, это чисто и легко. –

0

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

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

@sexes = Sex.all  
@sexes = @sexes.each{|sex| sex.name.capitalize} 

или

@sexes = Sex.all.each{|sex| sex.name.capitalize} 
+0

Я должен был подумать об этом ... Хотя другое решение намного чище. Спасибо за ваш ответ. –

+0

Да, после того, как я увидел другой ответ, я немного ударил себя. Слишком просто: P – rwilliams

0

В более простой способ сделать это в RoR4 будет использовать метод humanize. Таким образом, ваш код вида будет выглядеть так:

= f.collection_select :sex_id, @sexes, :id, :humanize 

Не нужно никаких дополнительных методов!