2012-08-22 65 views
0

他這是仍然允許grails 2.1.0,因爲它似乎並沒有保存到數據庫。這仍然允許在grails 2.1.0?

  def post = new Post() 
      post.message = params.message 
      post.author = User.get(springSecurityService.principal.id) 
      post.save() 

也有一種方法,我可以檢查看到它的保存?

謝謝

+0

你有錯誤後對象 - 將它們打印出來有:post.errors .allErrors.each {log.error它} – chrislovecnm

+0

Sargamichel,所有域類屬性是可空:默認爲false?你在單元測試中測試你的域類限制嗎?在單元測試中檢查你的約束和域行爲 –

+0

你應該閱讀由彼得Ledbrook寫的優秀系列的GORM Gotchas:1. http://blog.springsource.org/2010/06/23/gorm-gotchas-part-1/ 2. http://blog.springsource.org/2010/07/02/gorm-gotchas-part-2/ 3. http://blog.springsource.org/2010/07/28/gorm-gotchas-part- 3/ –

回答

-1

看起來有效。不知道你的限制和領域,很難多說。

可以確認save()調用工作與failOnError: true,如post.save(failOnError: true)

+2

如果您在控制器或服務中,failonerror用法通常是一種不好的做法,它可能在引導(創建實體)或測試中很有用。更好地驗證並獲得任何錯誤。 – lucke84

+0

你說得對,但這個問題沒有提到,沒有語境的四行代碼只是不起作用。我認爲failOnError是快速查明保存是否失敗的有效方法,這是個問題。 – doelleri

+0

當他從參數中讀取一些值時,我認爲他應該在控制器中(或者至少在服務中),在那裏我不會使用你建議的行爲。當然,不要說這是一種不好的做法,但是有一種背景,我認爲你的解決方案不適合 - IHMO。 – lucke84

2
  1. 經常檢查保存的結果:

    if (!post.save(flush: true)) { 
        log.error(post.errors) 
    } 
    
  2. 使用springSecurityService.currentUser

+0

spring-security-core插件爲您的控制器注入了一些方便的屬性。因此,您可以使用「principal」屬性來代替springSecurityService.currentUser。即:post.author =主要 –

+0

偉大的信息,謝謝! – Chris

+0

不可以,主體是'GrailsUser',只是一個POGO,而不是GORM要求的用戶/人域類 –

相關問題