2009-05-27 9 views
3

私は、次のGrailsのドメインクラスを持っている:Grailsのコントローラからドメインプロパティにアクセスするには?

class Product { 
    String name 
    Float basePrice 
    Category category 
    String image = "default.jpg" 

    static constraints = { 
     name(size:3..25, blank:false) 
     basePrice(scale:2, nullable:false) 
     category(inList:Category.list(), nullable:false) 
     image(blank:false) 
    } 
} 

コントローラから、私は画像のプロパティのデフォルト値(この場合は「default.jpg」)を取得したいです。このような何か:

def productInstance = new Product(params) 
productInstance.image = getProductPicturePath() ?: Product().image 

画像のパスを返しますが、何の画像が提出されなかった場合には、コントローラはデフォルトでNULL値を置き換えるものgetProductPicturePath。私は確かにこのような何か書くことができますが:

productInstance.image = getProductPicturePath() ?: "default.jpg" 

をそれは確かに非常に乾燥しない、と私は1つの場所で、デフォルト値を維持することを好むだろう。どうすればこれを達成できますか?

答えて

5

明白な解決策は、定数として宣言し、それを参照することです。

class Product { 
    static DEFAULT_IMAGE = "default.jpg" 
    String name 
    Float basePrice 
    Category category 
    String image = DEFAULT_IMAGE 

    static constraints = { 
     name(size:3..25, blank:false) 
     basePrice(scale:2, nullable:false) 
     category(inList:Category.list(), nullable:false) 
     image(blank:false) 
    } 
} 

productInstance.image = getProductPicturePath() ?: Product.DEFAULT_IMAGE 

さらに、getProductPicturePath()をデフォルト値に戻します。

+0

おかげで、それは私が探していたものです正確には – Cesar

0

params

def productInstance = new Product(params) 

にはimageキーこのプロパティをスキップして、ドメインクラスで定義されたデフォルト値のままになりますがない場合。だから、あなたのparamsはimageキーが含まれていないと仮定して、最も簡単な方法は、何の画像がありませんこれらの製品のすべてでimageプロパティの割り当てをスキップするようになります:

def imagePath = getProductPicturePath() 
if(imagePath) { 
    productInstance.image = imagePath 
} 
+0

私はそれを知らなかった。私のparamsにはイメージキーが含まれています。これは他のフィールドを持つアップロードフォームから来ており、ユーザーはイメージファイルをアップロードすることもアップロードしないこともできます。 – Cesar

関連する問題