Rails 3 Admin Section Design Вопрос о наследовании и пространстве имен - PullRequest
0 голосов
/ 17 января 2011

Как работает мой сайт, некоторые записи создаются пользователем, но заполняются только частично.Администратор должен заполнить некоторые поля записи.Я думал о том, чтобы поместить все проверки, связанные с административными полями, в подкласс.

Например, в /app/models/document.rb:

class Document < ActiveRecord::Base
  # minimal validations needed, etc
end

В /app/models/admin/document.rb (я даже неуверен, что приведенный ниже синтаксис является допустимым Ruby)

class Admin::Document < Document
  # Extra validations for the fields the admin
end

Мой подход был бы плохой идеей?Я также планирую использовать аутентификацию на основе ролей, используя что-то вроде CanCan.

Ответы [ 2 ]

2 голосов
/ 17 января 2011

Возможно, альтернативным маршрутом было бы использование CanCan, чтобы позволить администраторам заполнить документ пользователя, но вместо того, чтобы разделить запись на части или разделить ее на две части.Когда форма отправлена, добавьте поле administrated (или approved), а затем, если у вас один или несколько администраторов, вы можете выполнить поиск по unadministrated (или unapproved)

.В день, когда администратор делает окончательную отправку, он может установить для administrated (или approved) значение true.Тем самым завершение документа?

1 голос
/ 17 января 2011

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

class Document < ActiveRecord::Base
  attr_protected :completed_by_administrator # do not allow this to be set via mass assignment
  validate ..., :if => :completed_by_administrator # only do these validates if completed_by_administrator is true
end

Когда запись создается впервые, completed_by_administrator имеет значение false и проверки только для администратора не выполняются. Когда запись завершена администратором, установите completed_by_administrator = true в вашем контроллере, и проверки только для администратора будут автоматически выполняться до сохранения записи.

...