IF / CASE оператор ИЛИ MySQL ИЛИ массив для получения имени категории - PullRequest
0 голосов
/ 08 февраля 2012

На моем сайте появились записи, которые имеют категорию.На сайте есть только 5 категорий, поэтому у меня дилемма:


Установить связь между категорией таблицей и записями (category_id) таблицы

ИЛИ

Сделать метод, который возвращает имя категории через оператор IF / CASE?Например:

case @entry.category.id
  when 1
    "Games"
  when 2
    "Movies"
  when 3
    "Fun"
  [...]
end

(напоминаю, что я должен получить 10 названий категорий на странице)

ИЛИ

Использовать массив:

cat[1] = "Games"
cat[2] = "Movies"
cat[3] = "Fun"

[...]

<%= cat[@entry.category.id] %>

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

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

OR

Создайте константу CATEGORY_NAME и метод-обертку, чтобы получить имя с идентификатором в таблице записей (без использования таблицы / модели категории вообще). например.,

class Entry
  CATEGORY_NAME = [ "Games", "Movies", "Fun"]

  def category_name 
    CATEGORY_NAME[cat_id]  #cat_id being just 0,1,2 .. depends how you want to store
  end
  ...

Я уверен, что есть много способов достичь этого в любом случае.

Надеюсь, это поможет.

0 голосов
/ 08 февраля 2012

Я думаю, что это отношение определенно входит в базу данных.(добавление таблицы категорий)

это наиболее разумный и масштабируемый вариант.

Это также самый чистый, потому что вы нарушаете разделение данных, отображения и логики (MVC: модель, представление, контроллер) при жестком кодировании категорий в вашем приложении.

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

SELECT item.*, category.name 
FROM item
LEFT JOIN category ON category.id = item.category_id
WHERE some=condition

существуют похожие запросы для INSERT и UPDATE (по крайней мере, в MySQL), поэтому вам никогда не понадобится второй запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...