Как перенаправить на действие различных контроллеров с параметрами целевого контроллера в граалях

У меня есть два класса домена автор и книга, связанные как 1 ко многим. Когда я создаю новую книгу для конкретного автора, Я хочу перенаправить (после нажатия кнопки сохранить) на действие показать контроллера автора, чтобы показать полную информацию о конкретном авторе со списком всех книг, которые он написал.

class Author {
  String fistName
  String secondName

  static hasMany = [books: Book]
}

class Book {
  String title
  String dateOfPublication
  //Author author

  static belongsTo = [author: Author]
}


//BookController
def save() {
    def bookInstance = new Book(params)
    if (!bookInstance.save(flush: true)) {
        render(view: "create", model: [bookInstance: bookInstance])
        return
    }

    flash.message = message(code: 'default.created.message', args: [
      message(code: 'book.label', default: 'Book'),
      bookInstance.id])

    if(params.tempid){
      redirect(action: "show", controller: "author", id: params.id)
    }else{
      redirect(action: "show", id: params.tempid)
    }
}

Однако приведенный выше код не перенаправил меня, как я хотел, но вместо этого выполнил оператор else с флэш-сообщением » книга не найдена с id null»

Ниже эта _книга.GSP шаблон визуализации внутри шоу.gsp авторского класса.

 <table class="table table-striped table-hover" id="book-data">
        <thead>
          <th class="sortable">Title</th>
          <th class="sortable">Date of Publication</th>
        </thead>

        <tbody>
          <g:each in="${authorInstance.book}" status="i" var="p">
            <tr class="prop">
              <td style="vertical-align: middle;" valign="top" class="value">${p?.title}</td>
              <td style="vertical-align: middle;" valign="top" class="value">${p?.dateOfPublication}</td>
             <td style="vertical-align: middle;" valign="top"><g:link class="btn btn-edit" action="edit" controller="book" id="${p?.id}"> Edit</g:link></td>
            </tr>
          </g:each>
        </tbody>
      </table>

Как мне сделать это правильно.?

Спасибо за помощь.

Отредактировано: authorInstance.id изменен на params.id

1 ответ

  1. Если вы хотите перенаправить на ваш экземпляр автора после сохраненияbook, вы должны отправить параметры запроса автора в idпределах сохранения. По умолчанию идентификатор автора содержится в paramsmap as author.id.
    Так что это должно сработать:
    redirect(action: "show", controller: "author", id: params.author.id)