我有一个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); }
});
答案 0 :(得分:0)
如果问题始于特定gem的更新(在本例中为MongoID),那么首先要考虑的是找到CHANGELOG,看看原因是什么。在这种情况下, it is a pretty long changelog ,但仍然是您自己找到原因的最佳选择。
此外,MongoID有一个相当不错的 upgrading guide ,可能会指向正确的方向。
有一件事引起了我的注意,在ItemsController#new
中,您使用_items.html.erb
填充的局部变量渲染@items
。但是@items
设置在哪里?使用您提供的代码,看起来@items
返回nil。