2010-03-10 3 views
0

У меня есть два домена, объявленные в моем приложении.Grails - Поиск многих-ко-многим

class Posts { 

    String title 
    String content 
    static hasMany = [tags:Tag] 

    static constraints = { 
    } 
} 

class Tag { 

    String Name 
    static belongsTo = Post 
    static hasMany = [posts:Post] 
    static constraints = { 
    } 

    String toString() 
    { 
     "Tag:${Name}" 
    } 
} 

У меня есть контроллер, который управляет поиском и отображением результатов:

package com.trafigura.com.trafigura 

class ViewerController { 

    def defaultAction='search' 
    def search={} 

    def show = { 
     def _foundPost = Post.findAllBytitle(params.title) 
     return [posts: _foundPost, term: params.title] 
    } 
} 

Код search.gsp выглядит следующим образом:

<html> 
    <head><title>Simple GSP page</title></head> 
    <body>Place your content here. 

     <formset> 
     <legend>TagsPosts</legend> 
      <g:form action="show"> 
      <label for="title">Title</label> 
      <g:textField name="title" /> 
      <g:submitButton name="search" value="Search"/> 
      </g:form> 
     </formset> 
    </body> 
</html> 

и следующий код для шоу. GSP.

<html> 
    <head><title>Simple GSP page</title></head> 
    <body><h1>Results</h1> 
    for items matching <em>${term}</em>. 
    Found <strong>${posts.size()}</strong> hits. 
    </p> 
    <ul> 
    <g:each var="tag" in="${posts.tags}"> 
     <li>${tag.Name}</li> 
    </g:each> 
    </ul> 

    <g:link action='search'>Search Again</g:link></body> 
</html> 

Мой Вопрос Я не могу отобразить метки следующим образом:

Результаты

Найдено 1 хитами.

* [planting, dig] 

Однако я хочу вывод как:

* planting 
* dig 

Что я делаю неправильно здесь?

Многозначительный.

+1

Я заметил код 'Post.findAllBytitle' использует нижний регистр 'название' в нем - это то, что вызывает какие-либо ошибки для вас? Я ожидал, что это будет «Post.findAllByTitle» с капиталом «T». –

+0

спасибо Роба, я действительно сделал там опечатку, однако я нашел решение проблемы. def postfound = Post.findByTitle(params.title) проблема с findAllByTitle заключается в том, что он возвращает список возможных значений, которые Филпл в своем ответе ниже правильно указал. благодарю, Приветствия WB – WaZ

ответ

2

Заменить

<g:each var="tag" in="${posts.tags}"> 

по

<g:each var="tag" in="${posts.tags[0]}"> 
+0

Привет, Фил, спасибо за ответ ур. Действительно, это сработало. Howver, теперь еще одна вещь, когда я запускаю приведенный выше код, он возвращает мне теги в случайном порядке, как я могу их отсортировать? Спасибо, Очень ценный – WaZ

+1

В своем классе Post domain объявите поле тегов как SortedSet. См. Второй пример для класса Author в этом примере: http://www.grails.org/GORM+-+Collection+Types – Philippe

Смежные вопросы