在Rails 3中使用Ajax更新部分

时间:2012-04-09 20:27:44

标签: ruby-on-rails ajax ruby-on-rails-3 partials

我有一个项目列表和一个侧边栏,我在其中显示有关项目的详细信息。侧栏是部分的,当在列表的项目上触发事件onmouseenter时,它应该随Ajax一起更改。

我已经设法通过Ajax将id(我输入鼠标的项目)发送到我的控制器的动作“列表”但是部分没有更新...... :(

我确信我非常接近解决方案。我是Ajax的新手,我在StackOverflow和许多其他网站上搜索了整个下午,但他们总是解释如何用Ajax管理CRUD操作,它似乎对我不起作用......

以下是代码:

-ajax部分:

$("div.item").mouseenter(function(event){
 var id = $(this).attr('data');
    var url = "/item/list?id="+id+"&lg=en";
    var data = $(this).serialize();
    $.post(url,function(response_data){$("#item_details").html(response_data)});
    return false;
});

- 控制器动作:

def list
    @items = Item.all
    if request.xhr?
        id_exists?("item", params[:id], "item", "list"){@item = Item.find(params[:id])}

        render :partial => "item/sidebar/sidebar_home", :object => @item
    else
        @item = @items.first unless @items.empty?
    end
end

-Hml:

content_for :sidebar do
   #item_details
       =render :partial => "item/sidebar/sidebar_home", :object => @item


.items_wrapper
-if @items.empty?
    ="No items"
-else
    = render :partial => "item/partials/item", :collection => @items

在第二部分内部,我有div.item包装了一切。 所以基本上,我想更新侧边栏的内容,这就是全部。

对不起,如果问题看起来很愚蠢,请事先感谢您的帮助。

问题解决了感谢Ogz向导! XD

1 个答案:

答案 0 :(得分:2)

您需要传递回调函数来处理来自AJAX请求的响应。见http://api.jquery.com/jQuery.post/

示例可能如下所示:

$.post(url, data, function(response_data){ $("#sidebar_id").replaceWith(response_data) });