2013-02-11 69 views
0

如何在grails中保存類的擴展? 例如我有類用戶和管理員Grails保存擴展類

class User { 
    String name 
    String password 
} 

class Administrator extends User { 
    String authoritySelected 
} 

例如類用戶,我有保存「USER1」, ,然後我想改變類用戶user1級管理員和更新authoritySelected

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

並得到錯誤:

沒有這樣的屬性:authoritySelected類:用戶

那麼,如何保存在類中選擇User並將其更改爲類Administrator?謝謝。

回答

0

當你說「然後我想更改user1從班級用戶到班級管理員」,你究竟想要做什麼?

您正試圖訪問該對象中不存在的對象的屬性。向下轉換根本不能像那樣工作。您應該實例化一個類型爲Administrator的對象,以便在其後保存其屬性之一。

1

說到語法,你寫的代碼沒有意義。談論設計,也沒有。

我可以建議你在嘗試做這種事情之前學習一點OOP嗎? :)

但讓我們面對你提交的問題。

第一個建議:不要爲你的應用程序實現安全系統,有很多東西可以爲你做。首先是:Spring Security plugin

第二:你寫的代碼不起作用,因爲擴展一個類是使父類的另一個類「子」的方法。在你的例子中,管理員是用戶的兒子。

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) 
} 

如果你希望你的用戶更改角色,最簡單的認爲想在角色並不像其它類,而不是它應該是用戶的屬性,所以你可以改變它。一旦創建了一個類的實例,就不能改變它(可能這不完全正確,但不應該)。

OK,一些代碼:

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 
} 

這仍然不是一個好的設計方案給我,我只是試圖讓你能夠看到你在做什麼錯。

0

,如果你想創建你需要創建一個用戶的實例的用戶,例如:

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

管理員是用戶太多,但有一個數據越多,authoritySelected,所以如果管理員延伸用戶,他也擁有和用戶一樣的數據。

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

注意,Object.get(X)的方法需要一個ID(長), 「X」 是一個長值,而不是字符串。 http://grails.org/doc/2.3.x/ref/Domain%20Classes/get.html