如何在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?感谢。
答案 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