0

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

现在的问题是,当单击按钮时,数据库会更新为新记录,但页面不会更新。我检查了 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); }
});
4

1 回答 1

0

如果问题是从特定 gem(在本例中为 MongoID)的更新开始的,那么首先要考虑的是找到 CHANGELOG,看看可能是什么原因。在这种情况下,它是一个相当长的变更日志,但最好还是自己找出原因。

此外,MongoID 有一个非常好的升级指南,它可能会为您指明正确的方向。

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

于 2012-06-27T07:58:50.967 回答