Ajax довольно прост в использовании в Rails 3.1. В этом посте предполагается, что вы используете jQuery в качестве драйвера JavaScript; в противном случае вам нужно будет установить гем jquery-rails, но даже для приложения, находящегося в производстве, добавление маленького камня не должно быть большой проблемой.
Ваш контроллер в конечном итоге будет выглядеть так:
....
def up
@link = Link.find(params[:id])
@link.update_attribute :points, @link.points + 1
respond_to do |format|
format.html {redirect_to :back}
format.js
end
end
def down
@link = Link.find(params[:id])
@link.update_attribute :points, @link.points - 1
respond_to do |format|
format.html {redirect_to :back}
format.js
end
end
....
Изменение вида будет довольно маленьким:
<% @links.each do |link| %>
<div class="row">
<div class="span2">
<%= link_to (image_tag ("up.png")), up_link_url(link), :method => :put, :remote => true %>
<%= link.points %>
<%= link_to (image_tag ("down.png")), down_link_url(link), :method => :put, :remote => true %>
</div>
<div class="span8">
<%= link_to strip_tags(link.title), link %>
</div>
</div>
И вам понадобятся новые файлы up.js.erb и down.js.erb в вашей папке app / views / links /, которые содержат команду JavaScript для обновления вашей страницы:
$(".span2").html("This post has <%= @link.points %> points.")
Если вы решите использовать Prototype или что-то еще, код будет выглядеть более или менее одинаково; единственным изменением будет JavaScript, который вы поместите в up.js.erb и down.js.erb, который должен быть Prototype-y вместо jQuery-y.