Когда пользователь создает новый объект Load
, если пользователь установит флажок «Оплачено при доставке», они будут перенаправлены на контроллер Payment
сразу после создания нового Load
. Несколько параметров, необходимых для создания нового Load
, также используются для создания нового Payment
, поэтому я просто передаю параметры в перенаправлении следующим образом:
redirect(controller: "payment", action: "create", params: params)
Это прекрасно работает, но дает мне настоящий неприятный URL со всеми параметрами в нем. Как я могу передать свои параметры другому контроллеру и не дать им появиться в URL?
UPDATE:
Я должен сказать, что я ценю все предложения относительно такой маленькой проблемы. Несмотря на все предложения, все же кажется, что лучший способ сделать это - это то, как я хотел избежать, создавая карту параметров вручную в вызове redirect
. Это не так уж важно, тем более что есть только несколько параметров, я просто не верю, что нет более чистого, более автоматизированного способа исправить это.
def loadInstance = new Load(params)
if (loadInstance.save(flush: true)) {
Account.get(params.account.id).balance -= new BigDecimal(params.transactionAmount)
flash.message = "${message(code: 'default.created.message', args: [message(code: 'load.label', default: 'Load'), loadInstance.id])}"
if(params.paidOnDelivery){
redirect(
controller: "payment",
action: "create",
//There has to be a better way than this. Just writing "params:params" results in the values being wrapped in double quotes once they get to the Payment controller. If it wasn't for that then "params:params" would work great and I would not of had to ask this question :)
params: [
"account.id":params.account.id,
"dateOfTransaction":params.dateOfTransaction,
"dateOfTransaction_year":params.dateOfTransaction_year,
"dateOfTransaction_month":params.dateOfTransaction_month,
"dateOfTransaction_day":params.dateOfTransaction_day,
"dateOfTransaction_hour":params.dateOfTransaction_hour,
"dateOfTransaction_minute":params.dateOfTransaction_minute,
"transactionAmount":params.transactionAmount
]
)
return
}
redirect(action: "show", id: loadInstance.id)
}
else {
render(view: "create", model: [loggedByUsers:loggedByUsers, accounts:accounts, cargoProviders:cargoProviders, deliveredByUsers:deliveredByUsers, loadInstance:loadInstance])
}