Ruby - как добавить элементы из ActiveRecord в существующую хеш-структуру? - PullRequest
0 голосов
/ 12 февраля 2019

Я обновляю существующий проект Rails, и меню проекта отображается в следующей структуре:

def main_menu
    {
        users: item_hash('Users', @view.users_path),
        cars: item_hash('Cars', @view.cars_path),
        bikes: item_hash('Bikes', @view.bikes_path),
        other_group: item_group('Other', {
          fees: item_hash('Fees', @view.fees_path),
          penalties: item_hash('Penalties', @view.penalties_path),
          bonuses: item_hash('Bonuses', @view.bonuses_path)
        }),
        calendar: calendar_menu
    }
end

Мне нужно добавить новый элемент в эту структуру (данные будут загружены из БД)и желаемый результат будет выглядеть следующим образом (добавлено brands_group):

def main_menu
        {
            users: item_hash('Users', @view.users_path),
            brands_group: item_group('Brands', {
              Audi: item_hash('Audi', @view.edit_brand_path(1),
              BMW: item_hash('BMW', @view.edit_brand_path(2),
              Toyota: item_hash('Toyota', @view.edit_brand_path(3)
            }),
            cars: item_hash('Cars', @view.cars_path),
            bikes: item_hash('Bikes', @view.bikes_path),
            other_group: item_group('Other', {
              fees: item_hash('Fees', @view.fees_path),
              penalties: item_hash('Penalties', @view.penalties_path),
              bonuses: item_hash('Bonuses', @view.bonuses_path)
            }),
            calendar: calendar_menu
        }
    end

Однако как мне загрузить данные из модели Brand и поместить их в такую ​​структуру?

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете сделать что-то вроде:

brands = Brand.all.map do |brand|
  [brand.name.to_sym, item_hash(brand.name, @view.edit_brand_path(brand.id))]
end.to_h #assuming you have a name column on the brands table

{
  users: item_hash('Users', @view.users_path),
  brands_group: item_group('Brands', brands),
  cars: item_hash('Cars', @view.cars_path),
  bikes: item_hash('Bikes', @view.bikes_path),
  other_group: item_group('Other', {
    fees: item_hash('Fees', @view.fees_path),
    penalties: item_hash('Penalties', @view.penalties_path),
    bonuses: item_hash('Bonuses', @view.bonuses_path)
  }),
  calendar: calendar_menu
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...