на пользователя - PullRequest
       1

на пользователя

1 голос
/ 31 марта 2011

Я работаю над переписыванием большого, ужасно написанного php-приложения в rails.Мы работаем с приложением уже несколько лет, и теперь у нас есть четкое представление о том, что оно на самом деле должно делать, поэтому я стремлюсь начать с чистого листа и наконец получить надежную базу кода для поддержки нашего приложения.

Одна вещь, которую я пытаюсь выяснить, - это как справиться с некоторыми функциями, которые есть во многих наших моделях.Приложение представляет собой веб-приложение для нескольких компаний, и каждая компания (и все пользователи), которые используют приложение, имеют множество предпочтений и пользовательских поисков.Предпочтения просты, я планирую просто настроить модель предпочтений для пользователей и компаний и составить эти таблицы ключей / значений.Хотя я немного больше борюсь с нашими моделями поиска.Взять, к примеру, статус.В типичном приложении у вас будет таблица состояния, и с ней можно покончить.В нашем случае статус может меняться в зависимости от компании вошедшего в систему пользователя.

В текущем приложении, я думаю, это реализовано довольно плохо.По сути, у нас есть таблица и модель состояния со столбцом company_id.Мы предоставляем набор статусов по умолчанию, с company_id = -1.Затем, если компания переопределяет их, мы сохраняем записи в таблице с их company_id.В приложении мы извлекаем их через хранимые процедуры, которые мы в основном передаем в company_id, и он возвращает либо записи по умолчанию, либо записи, специфичные для компании.

Я не фанат этого, в основном потому, что он делаеттрудно легко получить доступ к данным.В частности, наличие в таблице значений по умолчанию и специфичных для компании параметров означает, что вы не можете выполнить простой запрос для получения списка статусов, это может быть либо 2 запроса (для company_id, а затем, если нет результатов, для -1), либосложный запрос / процедура, выполняющая подсчет и оператор if в sql.С другой стороны, он допускает легкие отношения, так как другие объекты могут ссылаться на status_id и получать любой статус в таблице.

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

Есть ли у кого-нибудь предложения о том, как лучше это реализовать?

1 Ответ

0 голосов
/ 31 марта 2011

Одной из возможностей было бы просто реализовать статус как метод модели User. Например:

class User < ActiveRecord::Base
  belongs_to :company

  # users table has a status column
  def status
    read_attribute(:status) || company.default_status
  end
end

Теперь у пользователя может быть установлен статус или статус может быть НЕДЕЙСТВИТЕЛЕН. Если статус равен NULL, read_attribute (: status) возвращает nil, и вместо этого мы возвращаем company.default_status.

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

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