0

データベースに新しいオブジェクトを作成し、更新されたレコードをajaxで表示するadd_new_buttonがあります。Mongoid を 2.4 => 3.0.0.rc (バンドルの更新) から更新するまで、コードは正常に機能します。

問題は、ボタンをクリックすると、データベースが新しいレコードで更新されますが、ページは更新されません。ajax リクエストを確認したところ、部分的なページがレンダリングされましたが、新しく追加されたレコードはありませんでした。2 回目のクリックでは、以前に追加されたレコードがレンダリングされますが、最新のレコードはありません。何か案は?

コード スニペットで更新

_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 を見つけることです。そのため、何が原因であるかを確認してください。この場合、かなり長い changelogですが、自分で原因を見つけるのが最善の策です。

また、MongoID にはかなり優れたアップグレード ガイドがあり、正しい方向に進むことができます。

1 つ気になったのは、 で満たされたローカル変数でItemsController#newレンダリングします。しかし、どこに設定されていますか?あなたが提供したコードでは、nil を返すように見えます。_items.html.erb@items@items@items

于 2012-06-27T07:58:50.967 に答える