Rails 3管理员部分关于继承和命名空间的设计问题

时间:2011-01-17 14:31:01

标签: ruby-on-rails ruby-on-rails-3 inheritance namespaces admin

我的网站运营方式,一些记录由用户创建,但只是部分填写。管理员必须完成一些记录字段。我正在考虑将与管理字段相关的所有验证放在子类中。

例如,在/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 个答案:

答案 0 :(得分:2)

也许另一种方法是使用CanCan来允许管理员完成用户文档,而不是将记录子类化或将其拆分为两个。提交表单后,添加administrated(或approved)字段,如果是一个或多个管理员,您可以通过unadministrated(或unapproved)进行搜索

当然,在当天结束时,管理员会进行最终提交,以便他们可以将administrated(或approved)设置为true。从而最终确定文件?

答案 1 :(得分:1)

我认为将所有验证保留在一个类中可能会更好,并且有一个布尔数据库列存储记录是否已由管理员完成。

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,并在保存记录之前自动运行仅管理员验证。