从rails中的用户或应用程序本身进行两种不同的验证

时间:2013-07-07 11:05:05

标签: ruby-on-rails

我的程序正在尝试自动创建一些组,前缀为“automated_group”,加载所有组时都不显示,无法编辑,还有更多内容。但我必须限制用户这样做。 但是如果我创建一个验证函数,它将不会让我的应用程序执行它并且group.save返回false。即使更新其他属性,它也不会让我保存它,因为名称不会验证。

还有其他方法吗?有时使用验证,或者可能检查谁在改变价值?

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以使用cancan(https://github.com/ryanb/cancan)等权限系统。然后你可以定义这样的东西:

can :manage, Group, automated_group: false

答案 1 :(得分:0)

我在skip certain validation method in Model

中找到了答案的一半
attr_accessor :automated_creation
validate :check_automated_name, unless: :automated_creation

def check_automated_name
#...
end

并在我的控制器中:

def get_automated_group
    name = "automated_group_#{product.id}"
    group = Group.find(name: name).first
    group Group.new(automated_creation: true) unless group.blank?
    returrn group
end

更新时: 我将检查check_automated_name函数,它对名称的任何更改都发生在:

group.name_changed?

所以其他任何东西都可以更新,除了'name',唯一的创建方式是来自rails本身。