Rails: redirect_to: controller => 'tips',: action => 'show',: id => @tip.permalink
Я попытался перенаправить рельсы, чтобы показать действие, передав контроллер, действие и параметры. Однако рельсы полностью игнорируют название действия!
что я получил
http://mysite/controllername/paramId
поэтому у меня есть сообщение об ошибке....
вот код действия, который я использовал:
def update
@tip = current_user.tips.find(params[:id])
@tip.attributes = params[:tip]
@tip.category_ids = params[:categories]
@tip.tag_with(params[:tags]) if params[:tags]
if @tip.save
flash[:notice] = 'Tip was successfully updated.'
redirect_to :controller=>'tips', :action => 'show', :id => @tip.permalink
else
render :action => 'edit'
end
end
Ответы
Ответ 1
Это может быть временное "обойти". Используя рендер, он работает очень хорошо....
if @tip.save
flash[:notice] = 'Tip was successfully updated.'
render :action => 'show', :id => @tip.permalink
# redirect_to :controller=>'tips', :action => 'show', :id => @tip.permalink
else
render :action => 'edit'
end
Ответ 2
Зачем бороться с каркасом?
redirect_to @tip
И вы можете сократить свой код, используя опцию: уведомление.
redirect_to @tip, :notice => 'Message here'
Ответ 3
Если его маршрут ресурса REST, маршрутизация действительно правильная. Запрос GET
на /tips/id
фактически вызывает действие show
. Из-за способа маршрутизации я предполагаю, что вы направили его с помощью map.resources
, и это правильно.