Grails保存扩展类

时间:2013-02-11 09:02:39

标签: class grails extend

如何在grails中保存类扩展? 例如,我有班级用户和管理员

class User {
    String name
    String password
}

class Administrator extends User {
    String authoritySelected
}

类中的示例用户i已保存“user1”, 然后我想将user1从类用户更改为类管理员并更新authoritySelected

def update(){
    def user1 = User.get("user1")
    user1.authoritySelected
    user1.save(flush:true)
}

并收到错误:

  

没有这样的属性:authoritySelected for class:User

那么,如何在类User中保存权限并将其更改为类Administrator?感谢。

3 个答案:

答案 0 :(得分:1)

谈到语法,你写的代码毫无意义。谈到设计,都没有。

我可以建议你在尝试做这种事之前先研究一下OOP吗? :)

但是让我们面对您提交的问题。

第一个建议:不要为你的应用程序实现安全系统,有很多东西可以为你做。最重要的是:Spring Security plugin

第二:你编写的代码不起作用,因为扩展一个类是一种方法来创建父类的另一个类'son'。在您的示例中,Administrator是User的儿子。

def update(){
    def user1 = User.get("user1") // I don't get how this should work, but I'll leave it like this in this example
    user1.authoritySelected // you're trying to GET the value a property that doesn't exist in the User class, you should SET something here
    user1.save(flush:true)
}

如果您希望用户更改角色,最简单的想法是将角色视为不是另一个类,而应该是用户的属性,因此您可以更改它。一旦创建了一个类的实例,你就无法改变它(可能这不完全正确,但你不应该这样做。)

好的,有些代码:

class User {
    String name
    String password
    String authority // a property of the class you can change
}

def update(){
   def user1 = User.get("user1") 
   user1.authority = 'Administrator' // change the property on the instance you retrieved
   user1.save() // save the instance itself
}

这对我来说仍然不是一个好的设计解决方案,我只是想让你能够看到你做错了什么。

答案 1 :(得分:0)

当你说'#34;然后我想将user1从班级用户改为班级管理员"时,你到底想要做什么?

您正在尝试访问该对象中不存在的对象的属性。向下倾斜并不是那样的。您应该实例化Administrator类型的对象,以便在之后保存其中一个属性。

答案 2 :(得分:0)

如果要创建USER,则必须创建USER的实例,例如:

User u = new User(name: "xpto", password: "xptopass").save(flush:true)

管理员也是一个用户,但是还有一个数据,权限被选中,所以如果管理员扩展用户,他也有像用户一样的数据。

Administrator a = new Administrator(name: "xpto", password: "xptopPass", authoritySelected: "ADMIN").save(flush:true)

注意,Object.get(X)方法需要一个ID(Long),“X”将是Long值,而不是String。 http://grails.org/doc/2.3.x/ref/Domain%20Classes/get.html