I agree button_to is better. I used form because the book sample said so:(Agile Web Development With Ruby On Rails.pdf 3rd Edition)

On the index page, we’re using button_to to create the link to the add_to_cart
action. Underneath the covers, button_to generates an HTML form. The following
helper:
<%= button_to "Add to Cart" , :action => :add_to_cart, :id => product %>
generates HTML that looks something like this:
<form method="post" action="/store/add_to_cart/1" class="button-to">
<input type="submit" value="Add to Cart" />
</form>
This is a standard HTML form, so a POST request will be generated when
the user clicks the submit button. We want to change this to send an Ajax
request instead. To do this, we’ll have to code the form explicitly, using a Rails
helper called form_remote_tag. The form_..._tag parts of the name tell you it’s
generating an HTML form, and the remote part tells you it will use Ajax to
create a remote procedure call to your application. So, edit index.html.erb in the
app/views/store directory, replacing the button_to call with something like this:
Download depot_l/app/views/store/index.html.erb
<% form_remote_tag :url => { :action => 'add_to_cart', :id => product } do %>
<%= submit_tag "Add to Cart" %>
<% end %>