render yield?!

Hello,

I've got a little problem with remote functions. I call it for example
like this: <%= link_to_remote 'bla', :url => 'bla/whatever', :method =>
:get %>

that function would be:
def whatever
  flash[:notice] = "You're in whatever!"
  update_content
end

since I don't want the page to be reloaded completely, I update each div
box that needs to be updated:
def update_content
  render :update do |page|
    page.replace 'loginBox', :partial => 'shared/login'
    page.replace 'contentBox', :partial => 'shared/content'
    page.replace 'navigation', :partial => 'shared/navigation'
    page.replace 'menuBox', :partial => 'shared/menu'
  end
end

My problem nos is that the partial views/shared/_content.html.erb has a
yield which doesn't show me the content of views/bla/whatever.html.erb
anymore and only shows it when I access it directly (not using remote
functions).

Does anyone know how I possibly could still show the content of the
template of each action where yield is?

My other approach was:
<%= link_to_remote 'bla', :url => 'bla/whatever', :update =>
'contentBox', :method => :get %>

def whatever
  flash[:notice] = "You're in whatever!"
  respond_to do |format|
    format.html
    format.xml { head :ok }
  end
end

That would show the template as I want it but doesn't update login,
navigation and menuBox.

Any ideas? I'm kind out of ideas... :frowning:

Even though it became some monolog already...

I found a not so good solution to my problem:
def update_content
  render :update do |page|
    page.replace 'loginBox', :partial => 'shared/login'
    page.replace 'navigation', :partial => 'shared/navigation'
    page.replace 'menuBox', :partial => 'shared/menu'
    page.replace 'contentBody', :file => 'bla/whatever'
  end
end

Is :file a proper solution? If so, is there any variable that tells me
where the call is coming from (in my case it's called whatever) so I
don't have to give the :file path as a parameter whenever I call it?

I am not sure I understand your question.

Would you mean something like

  request.uri etc (that variable is available in the views)

or simply

  controller.action_name (available in the views)

More details for request.uri and (lots of) friends:

  http://api.rubyonrails.org/classes/ActionController/Request.html#M000694

for the controller.action_name:

  http://rubyonrailswin.wordpress.com/2007/03/07/actioncontroller-and-what-the-heck-is-attr_internal/

Was that your question ?

HTH,

Peter

On Wed, Mar 4, 2009 at 8:46 PM, Peter Vandenabeele

request.uri etc (that variable is available in the views)

More details for request.uri and (lots of) friends:

http://api.rubyonrails.org/classes/ActionController/Request.html#M000694

Sorry, I was mistaken, request.uri does not exist

What does exist is
* request.request_uri
* request.url

The results of a small test:

request.request_uri = /home
request.url = http://localhost:3000/home

These 2 attributes are available both in the controller and in the views.

HTH,

Peter

self.controller_name and self.action_name was what I was looking for,
thanks.

Anyone knows an alternative for:
page.replace 'contentBody', :file =>
self.controller_name+'/'+self.action_name?

Looks pretty dirty...