Rails 4 — как написать вспомогательный метод для представления имен атрибутов

У меня есть таблица ролей с атрибутом :name в ней.

Я пытаюсь использовать список имен ролей в коллекции select. Вместо того, чтобы перечислять :name так, как оно записано в базе данных, я хочу представить его аккуратно.

Например, :name имеет экземпляр, сохраненный как :admin в базе данных. Я хочу представить, что в коллекции выберите «Администратор».

Я попытался написать помощник ролей, который говорит:

модуль РолиПомощник

def text_for_role(name)
  case name
      when 'guest'
        'Guest - Trial Account'
      when 'admin'
        'Administrator'
      when 'representative'
        'Representative'
         etc, etc

но этот вариант не будет работать в данном контексте, потому что я хочу перечислить все роли, но сослаться на них красиво написано.

У меня есть эта коллекция, выберите:

<%= select_tag "roles", options_from_collection_for_select(@roles, "id", "<%= text_for_role(name)%>"), :multiple => true, :class => 'chosen-select form-control' %>

Может ли кто-нибудь увидеть, как я могу написать помощника или ведущего, который можно использовать для всего списка параметров выбора коллекции?


person Mel    schedule 13.08.2016    source источник
comment
Если бы я был на вашем месте и у меня была возможность, я бы просто добавил столбец display_name в таблицу ролей.   -  person jvillian    schedule 13.08.2016
comment
@jvilian - спасибо - хорошая идея.   -  person Mel    schedule 13.08.2016


Ответы (1)


создайте переменную уровня класса, например:

class MyClass 

   ROLES = [
      ['Guest - Trial Account' ,'guest' ],
      ['Administrator' , 'admin'],
      ['Representative' , 'representative']
   ]

end

Затем получите доступ к ним в представлении:

<%= select_tag 'roles', MyClass::ROLES %>

Дополнительная информация: здесь

person Emu    schedule 13.08.2016
comment
но мешает ли это ролям, которые я создаю с помощью установки CRUD? Я сделал «гостя» ролью. Я хочу, чтобы эта функциональность работала, но для целей этого списка я хочу отображать ее по-другому. Могу ли я использовать ваше предложение, не мешая настройке в БД? - person Mel; 13.08.2016
comment
Нет, это не мешает ролям в настройке CRUD. Допустим, вы добавили новую роль в базу данных, затем вам нужно вручную добавить эту роль в эту переменную класса. - person Emu; 13.08.2016
comment
Я пробовал это предложение, но получаю сообщение об ошибке: неопределенный метод `(Role::ROLES)' для #‹Role:0x007fe4a1dedfb8› - person Mel; 13.08.2016
comment
‹%= select_tag roles, options_from_collection_for_select(@roles, id, (Role::ROLES)), :multiple =› true, :class =› 'выбранный-выберите форму-управление' %› - person Mel; 13.08.2016
comment
Когда я удаляю () из Role::ROLES, я получаю сообщение об ошибке:... [после каждой пары ключ-значение, показанной выше]... не является ни символом, ни строкой - person Mel; 13.08.2016
comment
должно быть что-то не так с тем, как записывается массив. В сообщении об ошибке перечислены все пары в массиве и говорится: это не символ и не строка. - person Mel; 13.08.2016