2013-08-27 4 views
0

У меня есть отображение цвета и оттенков. Каждый цвет может иметь несколько оттенков.Что такое способ отображения URL-адресов для дочерних ресурсов

Как я могу получить сопоставление: «color/5/shades». С этим я хочу, чтобы показать все оттенки для Id цвета 5.

В настоящее время мое отображение, как это:

"/colors"(controller: "color", parseRequest: true){ 
     action = [GET: "list"] 
    } 

    "/color/$id" (resource: "color"){ 
     constraints { 
      id validator: { 
       !(it in ['create', 'detail') 
      } 
     } 
    } 

ответ

1

Это может быть легко отображается при Grails 2.3 is concerned.

//Grails 2.3 
"/color"(resources:'color') { 
    "/shades"(resources:"shade") 
} 

, то вы можете получить доступ к /color/${id}/shades

Когда Grails 2.2.4 или ниже, то я думаю, что ваш UrlMapping может быть оптимизировано более, как показано ниже:

class UrlMappings { 
    static mappings = { 
     "/colors/$id?/$shades?" (resource: "color"){ 
      constraints { 
       shades validator: { 
        it in ['shades'] 
       } 
       id validator: {it.isNumber()} 
      } 
     } 

     "/"(view:"/index") 
     "500"(view:'/error') 
    } 
} 


//controller action corresponding 
//GET 
def show(){ 
    if(params.id){ 
     if(params.shades){ 
      //If both id and shades present in URL 
      //then getShades 
      //maps to "/colors/5/shades" 
      getShades() 
     } else { 
      //If only id provided then GET color 
      //maps to "/colors/5" 
      getColor() 
     } 
    } else { 
     //If id not provided the list all colors 
     //maps to "/colors" 
     listColors() 
    } 
} 

private def getShades(){...} 
private def getColor(){...} 
private def listColors(){...} 

Примечание
Примечание, чтобы удалить отображение по умолчанию, предоставляемое гравюрами

//remove 
"/$controller/$action?/$id?"{ 
    constraints { 
     // apply constraints here 
    } 
} 

Обоснование за удаление записи по умолчанию: -
Вы не другой валидатор для (create и detail), если вы удалите эту запись, если вы не используете запись по умолчанию для REST сервисов.

+0

hmm Я не думаю, что смогу удалить отображение по умолчанию, предоставляемое граалями. Если я удалю это, тогда ломаются другие мои контроллеры, включая сопоставления для весенней безопасности. – Anthony

+0

@ Энтони То, хорошо. Думаю, я позаботился об этом. Посмотрите на валидатор для 'id'. :) Дайте мне знать, если какая-либо часть ответа непонятна. Я был бы рад прояснить ситуацию. – dmahapatro