Is there a way to redirect from one controller action to another without a server trip?

Hi

I want one controller action to invoke another action in another
controller, but I don't want the overhead of a redirect_to response
which then generates another request to the correct action and
controller. Any suggestions?

Pieter

Create object for that controller then call.
class A
def a1
invoke=B.new** invoke.action(args)**

end
end

class B
def action(args)

something

end

end

regards,
Loganathan

something like

render :controller => othercontroller, :action => :otheraction, :params
=> params

?

(preserving the params would be a sweet bonus :slight_smile:

something like

render :controller => othercontroller, :action => :otheraction, :params

=> params
Nope, I hope you cant call another controller action like this.

Thanks for the comments guys.

If there is not wasy way to bounce to another controller/action then
there should be. Its available via redirect_to, and one can render the
partials of another controllers actions, but it seems one cant quite
just get the action code to execute.

My usage case is this:

I am writing a web based simple text chat app. People submit comments,
calling the AddComment action, which updates the conversation, and
renders the comment to the people having the conversations.

I want to build in some predefined keywords that will get recognised in
the AddComment action, but will call another controller. Eg I have a
documents controller with a AttachDoc action which gets called normally
when the user clicks on the right button.

I now want to allow doc attachment from the commandline - So when
someone types 'AttachDoc' as a comment, controll should jump to the
documentscontroller. Redirect_to will do the job, but with a unnecessary
trip back to the user.

Still reading? thanks! Any suggestion?

Without thinking too much about it, how about if you create another
class that both your controllers can use?

# This class processes your actions
class YourActionClass
  def your_action(params)
    # here you process your request
  end
end

# This is the controller you want to process the "redirect".
class ControllerA < ApplicationController
  def your_action
    your_action_instance = YourActionClass.new
    your_action_instance.your_action(your_parameters)
  end
end

# This is the controller you want to recognize your special cases and
redirect them.
class ControllerB < ApplicationController
  def action
    if special_case
      your_action_instance = YourActionClass.new
      your_action_instance.your_action(your_parameters)
      # maybe you can render something here?
    else
       # your regular stuff goes here.
    end
  end
end