Rails 2 to Rails 3 upgrade issues

Hi All,

I’m very new to RoR development and am working through the
developer.apple.com tutorials to try to get a good enough working
knowledge to be able to start my own project. Unfortunately, i’m using
Rails 3 and the tutorials are aimed at a Rails 2 environment.

I’ve been able to get a fair way through the tutorials, working out some
of the simpler changes myself (changes to the routing API were
interesting), but i’ve hit a point where i’m stuck and google hasn’t
been able to help me.

I’m currently working through the “Spicing it up with Ajax” section of
http://developer.apple.com/tools/customizeonrailsleopard.html but am
unable to successfully convert the Rails 2 link_to_remote syntax into
Rails 3. I understand that the method is depreciated and that i should
use link_to with a :remote => true option specified, but the arguments
that i’m supplying don’t seem to be being picked up as a Javascript
link. Instead, when i click one of the links, the whole page is
refreshed and the arguments appear in the address bar (instead of an
Ajax call). E.g.
http://localhost:3000/events/4?remote=true&method=delete&confirm=Are+you+sure%3F&url=http%3A%2F%2Flocalhost%3A3000%2Fevents%2F4%2Fexpenses%2F6

My _expenses.erb event looks like so:

…<% for expense in expenses -%>

<%= link_to expense.vendor.name, expense.vendor %> <%= number_to_currency(expense.amount, :unit => "£") %> <%= link_to 'delete', :url => event_expense_url(event, expense), :confirm => 'Are you sure?', :method => :delete, :remote => true %> <% end -%>...

and my application.html.erb file:

Expenses <%= stylesheet_link_tag :all %> <%= javascript_include_tag :defaults %> <%= csrf_meta_tag %>

<%= yield %>

I’d be very grateful if anyone could offer some advice. Apologies if the
source code is too long for the forum.

Thanks,
Dave.

On Oct 15, 6:12am, David W. [email protected] wrote:

I’d be very grateful if anyone could offer some advice. Apologies if the
source code is too long for the forum.

if the rails.js file in public/javascripts? Is it being loaded? That
is the file that :remote => true is going to try to call. I seem to
remember that this is one of the major gotchas on a 2 to 3 conversion.

Steve

Thanks for the quick response, Steve. The rails.js file is in the
public/javascripts and it can be seen in the source of my page:

The link that is generated by the call to link_to is:

delete

Which mentions remote=true, but doesn’t appear to make any reference to
javascript.

I made a successful Ajax call in the prior part of the tutorial, only
this time with the following syntax:

<%= form_for [@event, @expense], :remote => true do |f| -%>

On 15 October 2010 12:12, David W. [email protected] wrote:

Hi All,

I’m very new to RoR development and am working through the
developer.apple.com tutorials to try to get a good enough working
knowledge to be able to start my own project. Unfortunately, i’m using
Rails 3 and the tutorials are aimed at a Rails 2 environment.

Rather than trying to learn rails 2 and 3 at once you might be better
to use a Rails 3 tutorial such as railstutorial.org. This is
available online free though initially it looks as if you have to pay.

Colin

The standard delete link created by scaffold is

    <%= link_to 'Destroy', question, :confirm => 'Are you

sure?’, :method => :delete %>

There is no reference to remote. Delete is not an ajax call, it is
just a javascript call that hides all the build a delete form stuff
that happened in Rails 2.x. By putting in :remote, it was probably
trying to do an Unobtrusive Javascript call to an unknown method. I
think!!!

If you are just trying to replace the delete link on the Apple demo,
try the above line.

Steve