2012-02-02 19 views
1

私のGrailsアプリケーションでは、ドメインクラスが2つあります。例えば、AuthorBookです。私は、デフォルトのURLマッピングを使用しています:GrailsのURLマッピング

static mappings = { 
    "/$controller/$action?/$id?"{ 
    constraints { 
     // apply constraints here 
    } 
    } 
} 

だから、ID 2で書籍を表示するには、相対URLは/book/show/2あるまたはID 5との著者のためには、/author/show/5です。 AuthorBookクラスの両方に固有のnameプロパティがあります。

私は著者または本を表示するURLが、その書籍/著者を識別するためにデータベースIDではなく名前を使用することを希望します。 /author/show/shakespeareおよび/book/show/ulysses。名前フィールドがid(主キー)であるようにドメインクラスを変更することなく達成可能ですか?

答えて

2

あなただけparams.idとして文字列(例えば「シェークスピア」)を渡すと、代わりにやっての可能性:あなたのコントローラメソッドで

Author.get(params.id) 

を行います

Author.findByName(params.id) 

を私の知る限りではidパラメータ(URLとともに使用する場合)はであり、longとなりません。

+0

これで簡単にテストしたところ、うまくいくように見えました。 'http://example.com:8080/myapp/books/show/Book1'に行き、" Book1 "という名前の私のブートストラップされた本をレンダリングするのを見ました。確かに、これはあなたのコントローラでかなりの量の作業を必要とします。 –

+0

コントローラを変更するのは簡単なことです - おそらく、各ドメインクラスに対して1つのアクションを(1行で)変更するだけです。より困難な部分は、そのアクションが呼び出されるすべての場所を追跡し、IDの代わりに名前を送信するように変更することです。とにかく、選択肢がないように見えるので、あなたは欲しいチェックマークに勝ちます。心のこもったおめでとう、ありがとう。 –

関連する問題