sedovalx / taxi

6 stars 3 forks source link

Проблема со статическими безмодельными сущностями #46

Closed kirzas closed 9 years ago

kirzas commented 9 years ago

Я про роли для пользователей и я также сделал сейчас статусы аренд. Они сейчас в контроллере задаются статическим массивом с ID и Label. Но они существуют только в среде контроллера, в сами модели сейчас всегда записывается только ID, а Label - только отображение при выборе в new и edit. Если посмотреть на таблицу пользователей, то там видно, что роль отображается на английском языке, т.е. в модель записан ID из массива. Я вижу несколько вариантов исправления, и даже готов это сделать, но я не могу решить, какой путь верный:

  1. Завести статические модели на эти сущности, в том числе создать базы, для них не создавать CRUD.
  2. Завести статические модели и разместить их только в клиентской части, например в те же FIXTURES (в описании сказано, что в продакшне их лучше не оставлять).
  3. Везде записывать Label, а не ID, тогда везде при обработке, в том числе в серверной части придется иметь дело со значением на кириллице.
  4. При выводе на экран таблицы преобразовывать обратно ID в Label.

@sedovalx подскажи, как лучше сделать и почему :)

sedovalx commented 9 years ago

@Argelein давай в каталоге models создадим по файлику на каждое из таких перечислений и будем их импортировать, куда нужно. В каждом файлике массив.

kirzas commented 9 years ago

@sedovalx значит, что к ним надо будет тоже через store обращаться, верно?

sedovalx commented 9 years ago

@Argelein нет. Это будут простые JS-объекты, возвращаемые модулем.

// app/models/roles.js
export default [
  { id: "Administrator", label: "Администритор" },
  { id: "Accountant", label: "Бухгалтер" },
  { id: "Repairman", label: "Ремонтник" },
  { id: "Cashier", label: "Кассир" }
];

Потом, например, в app/controllers/base/user-controller.js ты делаешь

import roles from "app/models/roles";

и используешь этот массив вместо того поля roles, которое там есть сейчас. Остался вопрос с отображением в списках. Можно в модель пользователя добавить новое вычислимое свойство:

import roles from "app/models/roles";
...
displayRole: function(){
    return roles.filter(r => r.id === this.get("role"))[0];
}.property("role")

После чего использовать его в app/controllers/users/index.js

sedovalx commented 9 years ago

@Argelein сделал пример с ролями

kirzas commented 9 years ago

Ок, все понял. Сделал статусы аренд также. Отдельным коммитом не стал делать.