使用ajax部分呈现失败

时间:2012-06-23 13:32:38

标签: ruby-on-rails jquery mongoid

我有一个add_new_button,它将在数据库中创建一个新对象,并用ajax显示更新的记录。代码运行良好,直到我从2.4 =>更新Mongoid 3.0.0.rc(包更新)。

现在问题是,当单击按钮时,数据库将使用新记录进行更新,但页面不会更新。我检查了ajax请求,它确实呈现了部分页面,但没有新添加的记录。虽然第二次单击将呈现先前添加的记录,但没有最新记录。有什么想法吗?

更新了代码段

它呈现_desktop.html.erb

#index.html.erb
<div id=columns>
    <%= render :partial => "desktop", :locals => { :items => @items } %>
</div>

* _ desktop.html.erb *由视图呈现,也适用于ajax更新(这是未使用ajax更新的页面)

#_desktop.html.erb
<%= form_tag(new_path, :remote => true) do %>
    <div class="m-body">
        <p>Select an item</p>
        <%= select_tag "user_items", options_from_collection_for_select(services, "id", "name", :prompt => true) %>
    </div>
    <div class="m-footer">
        <a href="#" class="btn">Close</a>
        <%= submit_tag "Confirm", :id => "add-item_btn" %>
    </div>
<% end %>

创建新项目没问题,它通过json

呈现_desktop.html.erb
# items_controller.rb
def new
    @user.items.create!(
        handle: 'name',
        content: 'body'
    )

    respond_to do |format|
        format.json { render :json => {:sucess => true, :html => (render_to_string '_items.html.erb', :locals => { :items => @items })} }
        format.html {}
    end
end

但是它没有使用新添加的项目获取更新的html ..

    <%# new.js.erb %>
    $('#add-item_btn').live('ajax:success', function(event, data){
    if(data.success == true) { $('#columns').html(data.html); }
});

1 个答案:

答案 0 :(得分:0)

如果问题始于特定gem的更新(在本例中为MongoID),那么首先要考虑的是找到CHANGELOG,看看原因是什么。在这种情况下, it is a pretty long changelog ,但仍然是您自己找到原因的最佳选择。

此外,MongoID有一个相当不错的 upgrading guide ,可能会指向正确的方向。

有一件事引起了我的注意,在ItemsController#new中,您使用_items.html.erb填充的局部变量渲染@items。但是@items设置在哪里?使用您提供的代码,看起来@items返回nil。