The problem is that using <a> for Ajax doesn't set params[:page_path].
If you use form ajax, that parameter automatically gets added.
That was sort of deliberate. Take the example in the documentation.
<a href="somewhere/else" update="body" push-state
new-title="Somewhere else">Go somewhere else.</a>
This would do the controller action for somewhere/else and render the
"body" part from somewhere/else.
If you did that via a form:
<form action="somewhere/else" update="body"><submit label="Go
somewhere else"/></form>
it sets params[:page_path] to request.fullpath, so you get the
controller action for somewhere/else and render the body from
request.fullpath.
That's generally the desired behaviour. <a> generally has a meaning
of "go somewhere else", whereas an ajax form generally means "update
the current page".
So you could fix your problem by doing this:
<a href="/concepts/new" params="&{:page_path => request.fullpath}"
class="btn btn-primary" updates="#welcome">Update to new!</a>
But really you should do this:
<form action="/concepts/new" updates="#welcome"><submit
label="Update to new!"/></form>
Besides the page_path benefit, by putting it in a POSTable form,
you're signalling that the operation is not idempotent. Among other
things, this means that caches can't mess with it and that Google and
other bots won't randomly follow it.
Bryan
On Tue, Oct 30, 2012 at 2:58 PM, Ignacio Huerta <[email protected]> wrote:
> I'm trying to make Ajax calls work the way I need them, and after some
> trouble I've created a very small example to show my issue. The following
> code works (the random number is updated):
>
> <h3 part="welcome"><%= rand.to_s %></h3>
> <a href="/concepts" class="btn btn-primary" updates="#welcome">Update to
> index!</a>
>
>
> But this code doesn't (Ajax returns error 500):
>
> <h3 part="welcome"><%= rand.to_s %></h3>
> <a href="/concepts/new" class="btn btn-primary" updates="#welcome">Update
> to new!</a>
>
> Note: I have "hobo_ajax_response" in my new action in the
> concepts_controller.
>
> The error as seen in Firebug is:
>
> undefined method `welcome_part' for
> #<#<Class:0x00000003af2438>:0x00000005937510>
>
> I've been reading about part contexts in the Ajax manual and I've tried
> playing with "@this" in the new action. I've also debugged a bit the
> template_environment.rb file in the dryml gem, until:
> send("#{context.part_name}_part", *context.locals)
>
> Does anyone know why "welcome_part" is accessible in the index action, but
> not in the new action? Is there any way to workaround this?
>
> Thanks!
>
> Regards,
> Ignacio
>
> --
> Ignacio Huerta Arteche
> http://www.ihuerta.net
> Teléfono: 0034 645 70 77 35
> Email realizado con software libre
>
> --
> You received this message because you are subscribed to the Google Groups
> "Hobo Users" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/hobousers?hl=en.
>
--
You received this message because you are subscribed to the Google Groups "Hobo
Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/hobousers?hl=en.