Как мне найти длинный список атрибутов и сопоставить его со значком fontawesome? - PullRequest
0 голосов
/ 17 января 2019

У меня есть модель PropertyFeatureOption, данные которой выглядят следующим образом:

+-----+-------------------------+--------+----------+---------+-------------------------+-------------------------+
| id  | name                    | shared | exterior | amenity | created_at              | updated_at              |
+-----+-------------------------+--------+----------+---------+-------------------------+-------------------------+
| 101 | Dining Room             | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 102 | Security                | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 103 | Common Area             | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 104 | Swimming Pool           | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 105 | Automatic Gate          | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 106 | Panic Button            | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 107 | Car Port                | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 108 | Electric Generator      | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 109 | Water Pump              | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 110 | Air Conditioning        | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 111 | Cable                   | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 112 | Kitchen                 | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 113 | Security Guard          | false  | false    | false   | 2014-01-30 00:07:36 UTC | 2014-01-30 00:07:36 UTC |
| 114 | Family Room             | false  | false    | false   | 2014-01-30 00:07:37 UTC | 2014-01-30 00:07:37 UTC |
| 115 | Other Room              | false  | false    | false   | 2014-01-30 00:07:37 UTC | 2014-01-30 00:07:37 UTC |
| 116 | Patio                   | false  | false    | false   | 2014-01-30 00:07:37 UTC | 2014-01-30 00:07:37 UTC |
| 117 | Electronic Security     | false  | false    | false   | 2014-01-30 00:07:37 UTC | 2014-01-30 00:07:37 UTC |
| 118 | Garage                  | false  | false    | false   | 2014-01-30 00:07:37 UTC | 2014-01-30 00:07:37 UTC |
| 119 | Dish                    | false  | false    | false   | 2014-01-30 00:07:37 UTC | 2014-01-30 00:07:37 UTC |
| 120 | Furnished               | false  | false    | false   | 2014-01-30 00:07:37 UTC | 2014-01-30 00:07:37 UTC |
| 121 | Living Room             | false  | false    | false   | 2014-01-30 00:07:37 UTC | 2014-01-30 00:07:37 UTC |
| 122 | Canteen                 | false  | false    | false   | 2014-01-30 00:07:37 UTC | 2014-01-30 00:07:37 UTC |
| 123 | Telephone Lines         | false  | false    | false   | 2014-01-30 00:07:37 UTC | 2014-01-30 00:07:37 UTC |
| 124 | Restroom                | false  | false    | false   | 2014-01-30 00:07:38 UTC | 2014-01-30 00:07:38 UTC |
| 125 | Powder Room             | false  | false    | false   | 2014-01-30 00:07:38 UTC | 2014-01-30 00:07:38 UTC |
| 126 | Den/Study               | false  | false    | false   | 2014-01-30 00:07:38 UTC | 2014-01-30 00:07:38 UTC |
| 127 | Water Tank              | false  | false    | false   | 2014-01-30 00:07:38 UTC | 2014-01-30 00:07:38 UTC |
| 128 | Partitions              | false  | false    | false   | 2014-01-30 00:07:39 UTC | 2014-01-30 00:07:39 UTC |
| 129 | Fully Fenced            | false  | false    | false   | 2014-02-27 06:31:34 UTC | 2014-02-27 06:31:34 UTC |
| 130 | Garden Area             | false  | false    | false   | 2014-02-27 06:31:34 UTC | 2014-02-27 06:31:34 UTC |
| 131 | Ceiling Fans            | false  | false    | false   | 2014-02-27 06:31:34 UTC | 2014-02-27 06:31:34 UTC |
| 132 | Grilled                 | false  | false    | false   | 2014-02-27 06:31:34 UTC | 2014-02-27 06:31:34 UTC |
| 133 | Kitchen Built-in(s)     | false  | false    | false   | 2014-02-27 06:31:34 UTC | 2014-02-27 06:31:34 UTC |
| 134 | Main Level Entry        | false  | false    | false   | 2014-02-27 06:31:34 UTC | 2014-02-27 06:31:34 UTC |
| 135 | Unfurnished             | false  | false    | false   | 2014-02-27 06:31:34 UTC | 2014-02-27 06:31:34 UTC |
| 136 | Barn                    | false  | false    | false   | 2014-02-27 06:31:34 UTC | 2014-02-27 06:31:34 UTC |

Всего в ней 117 записей.

Я пытаюсь сделать это наНа странице Property#Show, в зависимости от наличия какой-либо из них на объекте property, который я просматриваю, я хотел бы показать потрясающие шрифты значки, связанные с этими записями.

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

Например, если property имеет property_feature_option.name.eql? "Car Port" (то есть ID=107 в этой таблице выше), яхотел бы показать fa fa-car.Может быть много сопоставлений property_feature_options с удивительными шрифтами именами значков.

Например, Panic Button, Security Guard & Electronic Security может перейти к fa fa-bullhorn (просто пример).

Как мне к этому подойти?Не совсем уверен, с чего начать.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Один из вариантов - то, что говорит @iGian, поместите их в хеш. Чтобы сохранить вещи в порядке, вы должны поместить их в отдельное пространство имен:

module FeatureIconizer
  module_function

  ICONS = {
    'Car Port' => 'fa-car',
    'Panic Button' => 'fa-bullhorn',
    'Security Guard' => 'fa-bullhorn',
    ...
  }

  DEFAULT = 'fa-house'

  def icon_class(feature)
    'fa ' + ICONS.fetch(feature.name, DEFAULT)
  end
end

Другой вариант, поскольку вы определили свои функции в БД, это также добавить значок в БД. Таким образом, вам не нужно развертывание, чтобы изменить один значок.

0 голосов
/ 17 января 2019

Я бы, наверное, сделал что-то вроде этого, я определил чистый класс Ruby, чтобы показать, но вы можете настроить для Rails.

class PropertyFeatureOption
  attr_reader :name

  ICON_MAP  = { "fa fa-car" => ["Car Port"], "fa fa-bullhorn" => ["Panic Button", "Security Guard",  "Electronic Security"] }.freeze

  def initialize(name)
    @name = name
  end

  def icon
    icon = ICON_MAP.select { |k, v| v.include? name }.keys.first || "fa fa-whathever"
    icon.to_s
  end

end

property_feature_option = PropertyFeatureOption.new("Panic Button")
property_feature_option.icon #=> "fa fa-bullhorn"

property_feature_option = PropertyFeatureOption.new("Not in list")
property_feature_option.icon #=> "fa fa-whathever"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...