2015-10-30 3 views
0

Прямо сейчас, я следующий application_helper.rb метода:Как сделать структуру данных, доступными по всему приложению рельсов

module ApplicationHelper 

    def grades_k_5 
    [ 
     ['',], 
     ['Preschool', -1], 
     ['Kindergarten', 0], 
     ['First grade', 1], 
     ['Second grade', 2], 
     ['Third grade', 3], 
     ['Fourth grade', 4], 
     ['Fifth grade', 5], 
    ] 
    end 

До сих пор я использовал его только в представлениях (заселить селектор выпадающего), но теперь я также хотел бы использовать его в одной из моих моделей. Как я могу взять этот массив и поместить его где-нибудь, чтобы я мог ссылаться на него из этого вспомогательного метода, а также еще один метод, который я бы включил в свою модель? В конечном счете, я ищу одно место (DRY), чтобы изменить это, если мне когда-либо понадобится изменить структуру, а не перейти к нескольким методам.

+0

По дороге вы можете обнаружить, что имеет смысл просто создать таблицу базы данных, которая имеет эти значения и сделать ее объектом модели первого класса, я предполагаю, что вы сохраните эти значения в других моделях уже? – house9

+0

Интересно. Я относительно новичок во всем этом, и мне не пришло бы в голову положить что-то такое маленькое и почти полностью статическое в свою собственную таблицу. – tobogranyte

ответ

2

Для таких статических данных существует множество вариантов. Самый простой способ - метод класса.

class StaticData 
    def self.grades_k_5 
    [ 
     ['',], 
     ['Preschool', -1], 
     ['Kindergarten', 0], 
     ['First grade', 1], 
     ['Second grade', 2], 
     ['Third grade', 3], 
     ['Fourth grade', 4], 
     ['Fifth grade', 5], 
    ] 
    end 
end 

# then 
StaticData.grades_k_5 

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

+1

Метод класса - это правильный путь. Кстати, похоже, что он лучше хранится как хэш, чем массив. –

+0

@MaxWilliams: мне кажется, что это массив, потому что он напрямую передается 'options_for_select'. Хэш должен работать одинаково хорошо. –

+0

Почему метод класса вместо константы? Метод класса будет создавать новый массив каждый раз, когда он вызывается. – BroiSatse

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