0

ユーザーがマイクロポストを投稿できるアプリがあります。マイクロポストが投稿されたら、ajaxとjqueryを使用して、ページを更新せずにページの投稿を更新します。

数日前までは正常に機能していましたが、突然ランダムに機能し、機能しない場合と機能する場合があります。マイクロポストが投稿され、データベースが更新されますが、レンダリングしたjsテンプレートはほとんどの場合起動されないようです。

マイクロポストコントローラーはアクションを作成します:

def create
     @micropost = current_user.microposts.build(params[:micropost])

        respond_to do |format|
            if @micropost.save
            format.js   { render :post_on_wall }
            end
        end

end

Post_on_wall jsテンプレート:

$('form#new_micropost').off().on('ajax:success', function(e){
  alert('working');

    e.preventDefault();

    var micropostsContainer = $(this).parent('div.microposts');


    micropostsContainer.find('div.postsContainer').prepend('<%= j render("users/partials/micropost") %>');
    micropostsContainer.find('div.postHolder:first').hide().slideDown(250);
    micropostsContainer.find('textarea#micropostBox')
        .removeClass("micropost_content_expanded")
        .addClass("micropost_content")
        .val("");
    micropostsContainer.find('div#micropostOptions').addClass('micropostExtraOptions');
    micropostsContainer.find('div#postOptions').hide();
    micropostsContainer.find('div.imagePreview').css({
                                                  marginBottom:'0px',
                                                  marginTop:'0px'
                                                  })
                            .children().remove();

});

これは奇妙になります。アラートを除いてjsテンプレート内のすべてのコードを削除すると、起動されます。すべてのコードを元に戻すと、アラートは発生しません。ここで、マイクロポストを部分的にレンダリングするerbコードを削除し、文字列にテキストを追加すると、jsテンプレートアラートが発生し、ページがテキストで更新されます。

なぜこれが起こっているのか分かりません。数日前のバージョンのアプリに戻っても、同じ問題が発生します。私が変更したのは、レールバージョンだけです。3.2.0から3.2.3にアップグレードしました。

マイクロポストがまだDBに投稿されていることを考慮に入れて、なぜこのJSAjaxの問題が発生しているのか考えてみてください。私は実際、フォームでのremote_toの使用を廃止し、代わりにストレートJQuery $ .ajaxを使用することに近づいていますが、そうする必要はありません。私はレールが提供するものを利用するのが好きです。

これが私のスタックトレースです:

Started POST "/microposts" for 127.0.0.1 at 2012-05-21 11:41:31 +0100
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1] Processing by MicropostsController#create as JS
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   Parameters: {"utf8"=>"✓", "authenticity_token"=>"4KVkocVy4ONTrhQ7DqBWsJXcZC8uYDOjmv6C1DlcRxg=", "micropost"=>{"photo_attributes"=>{"photo_album_id"=>"25"}, "user_id"=>"2", "content"=>"lkkllk", "link"=>""}, "commit"=>"Post"}
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]    (0.1ms)  BEGIN
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   SQL (0.3ms)  INSERT INTO `microposts` (`content`, `created_at`, `image`, `link`, `poster_id`, `updated_at`, `user_id`) VALUES ('lkkllk', '2012-05-21 10:41:31', NULL, '', NULL, '2012-05-21 10:41:31', 2)
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]    (0.3ms)  COMMIT
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   Micropost Load (0.7ms)  SELECT `microposts`.* FROM `microposts` WHERE `microposts`.`user_id` = 2 ORDER BY microposts.created_at DESC LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   CACHE (0.0ms)  SELECT `microposts`.* FROM `microposts` WHERE `microposts`.`user_id` = 2 ORDER BY microposts.created_at DESC LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   CACHE (0.0ms)  SELECT `microposts`.* FROM `microposts` WHERE `microposts`.`user_id` = 2 ORDER BY microposts.created_at DESC LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   Profile Load (0.3ms)  SELECT `profiles`.* FROM `profiles` WHERE `profiles`.`user_id` = 2 LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   Photo Load (0.2ms)  SELECT `photos`.* FROM `photos` WHERE `photos`.`id` = 3 LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   CACHE (0.0ms)  SELECT `microposts`.* FROM `microposts` WHERE `microposts`.`user_id` = 2 ORDER BY microposts.created_at DESC LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   CACHE (0.0ms)  SELECT `microposts`.* FROM `microposts` WHERE `microposts`.`user_id` = 2 ORDER BY microposts.created_at DESC LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   CACHE (0.0ms)  SELECT `microposts`.* FROM `microposts` WHERE `microposts`.`user_id` = 2 ORDER BY microposts.created_at DESC LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   Photo Load (0.3ms)  SELECT `photos`.* FROM `photos` WHERE `photos`.`micropost_id` = 4892 LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   CACHE (0.0ms)  SELECT `microposts`.* FROM `microposts` WHERE `microposts`.`user_id` = 2 ORDER BY microposts.created_at DESC LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]    (0.2ms)  SELECT COUNT(*) FROM `comments` WHERE `comments`.`micropost_id` = 4892
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   CACHE (0.0ms)  SELECT `microposts`.* FROM `microposts` WHERE `microposts`.`user_id` = 2 ORDER BY microposts.created_at DESC LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   CACHE (0.0ms)  SELECT COUNT(*) FROM `comments` WHERE `comments`.`micropost_id` = 4892
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   Photo Load (1.9ms)  SELECT `photos`.* FROM `photos` WHERE `photos`.`id` = 3 LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   CACHE (0.0ms)  SELECT `microposts`.* FROM `microposts` WHERE `microposts`.`user_id` = 2 ORDER BY microposts.created_at DESC LIMIT 1
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   Rendered users/partials/_micropost.html.erb (19.3ms)
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1]   Rendered microposts/post_on_wall.js.erb (20.8ms)
[afb16a524c6d01fd7408e9944dbf30f9] [127.0.0.1] Completed 200 OK in 33ms (Views: 20.0ms | ActiveRecord: 4.5ms | Sphinx: 0.0ms)

私はそれを修正できるように何が起こっているのかについての洞察を本当に感謝します。

敬具

4

1 に答える 1

0

Railsは、レンダリングするインスタンス変数を認識していません。:localsハッシュで@micropostを渡すか、「@micropostをレンダリング」します。

優れたモデルについては、この非常に役立つrailscastを参照してください:http://railscasts.com/episodes/136-jquery

于 2012-05-21T20:41:03.270 に答える