Это грубая стартовая идея для вас.
Начну с простых вещей; вид:
= link_to @item.active == true ? "yes" : "no", make_active_path(@item), :class => 'item'
Затем, если они нажимают на элемент, мы нацеливаем его на jQuery и AJAX:
Эта плохая функция задницы будет работать для вас и для других вещей, так что просто бросьте это вверху вашего файла javascript. :
jQuery.fn.submitWithAjax = function() {
this.live("click", function() {
$.ajax({type: "GET", url: $(this).attr("href"), dataType: "script"});
return false;
});
};
Тогда внутри с остальным кодом jQuery напишите:
$(".item").submitWithAjax();
Запрос AJAX отправляется на ваш контроллер:
def make_active
@item = Item.find(params[:id])
if @item.active == true
@item.update_attribute("active","false")
else
@item.update_attribute("active","true")
end
respond_to do |format|
format.js { render :action => "update", :layout => false }
end
end
Тогда заставьте update.js.erb сказать:
$("#item_#{@item.id}").replaceWith("#{ escape_javascript(render :partial => 'controller/item_view', :locals => {:item_view => @item}) }");
Но это также означает, что вам нужно, чтобы каждый элемент был внутри отдельной части внутри родительского представления, например:
= render :partial => 'item_view', :collection => @items
Внутри файла с именем _item_view.html.haml
запись:
%div{:id => "item_#{item_view.id}"}
%div{:id => "post_#{post_view.id}"}
Для этого метода не забудьте составить маршрут в вашем rout.rb.