2012-02-07 5 views
0

Hartl 's Rails 튜토리얼 서적을 마쳤으며 이제 좀 더 배우려고합니다. 제출 후 기능에 피드 업데이트를 추가하려고했습니다. 단 한 가지 예외가 있습니다. 어떤 이유로 든 제출 버튼을 클릭 할 때마다 두 개의 항목 (중복)이 db에 추가됩니다. 내가 터미널에서 서버 대화 상자를 보면 기본적으로,이 두 볼이 내 create.js.erb게시물의 AJAX 피드 업데이트

입니다

def create 
    @micropost = current_user.microposts.build(params[:micropost]) 
    if 
     @micropost.save! 
     respond_to do |format| 
     format.html { redirect_to root_path } 
     format.js 
     end 
    end 
    end 

:

Started POST "/microposts" for 127.0.0.1 at 2012-02-07 22:17:41 +1300 
Creating scope :from_users_followed_by. Overwriting existing method Micropost.from_users_followed_by. 
    Processing by MicropostsController#create as JS 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"p2pZx4VtIOSnywyVrXnk0vOpI5WdGVeuhLTfEaXmT6o=", "micropost"=>{"content"=>"This is a test post!"}, "commit"=>"Submit"} 
    User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1 
    (0.1ms) BEGIN 
    SQL (0.4ms) INSERT INTO "microposts" ("content", "created_at", "updated_at", "user_id") VALUES ($1, $2, $3, $4) RETURNING "id" [["content", "This is a test post!"], ["created_at", Tue, 07 Feb 2012 09:17:42 UTC +00:00], ["updated_at", Tue, 07 Feb 2012 09:17:42 UTC +00:00], ["user_id", 19]] 
    (13.6ms) COMMIT 
    (0.5ms) SELECT COUNT(*) FROM "microposts" WHERE (user_id IN (SELECT followed_id FROM relationships 
WHERE follower_id = 19) OR user_id = 19) 
    Micropost Load (0.5ms) SELECT "microposts".* FROM "microposts" WHERE (user_id IN (SELECT followed_id FROM relationships 
WHERE follower_id = 19) OR user_id = 19) ORDER BY microposts.created_at DESC LIMIT 5 OFFSET 0 
    CACHE (0.0ms) SELECT COUNT(*) FROM "microposts" WHERE (user_id IN (SELECT followed_id FROM relationships 
WHERE follower_id = 19) OR user_id = 19) 
    User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1 
    CACHE (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1 
    CACHE (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1 
    CACHE (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1 
    CACHE (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1 
Rendered shared/_feed_item.html.erb (11.7ms) 
Rendered shared/_feed.html.erb (20.4ms) 
    (0.3ms) SELECT COUNT(*) FROM "microposts" WHERE "microposts"."user_id" = 19 
Rendered microposts/create.js.erb (23.3ms) 
Completed 200 OK in 103ms (Views: 26.9ms | ActiveRecord: 23.4ms) 

이 내 microposts 컨트롤러에

$(".ajaxreloadposts").html("<%= escape_javascript(render('shared/feed')) %>") 

이 내 home.html.erb에서입니다

<% if signed_in? %> 
    <table class="front" summary="For signed-in users"> 
    <tr> 
     <td class="main"> 
     <h1 class="micropost">Create Post:</h1> 
     <%= render 'shared/micropost_form' %> 
     <span class="ajaxreloadposts"> 
     <%= render 'shared/feed' %> 
     </span> 
     </td> 
     <td class="sidebar round"> 
     <%= render 'shared/user_info' %> 
     <%= render 'shared/stats' %> 
     </td> 
    </tr> 
    </table> 
<% else %> 

마지막으로, 여기에 흥미롭게 매김 버튼 .. AJAX 업데이트와 함께뿐만 아니라 잘못 다시로드 대신 원하는 형식 page?=microposts?=의 형태에 걸릴 그러나 이것은 완전히 다른 문제입니다

<% @feed_items = current_user.feed.paginate(:page => params[:page], :per_page => 5) %> 
<% unless @feed_items.empty? %> 
    <table class="microposts" summary="User microposts"> 
    <%= render :partial => 'shared/feed_item', :collection => @feed_items %> 
    </table> 
    <div class="digg_pagination"> 
    <%= will_paginate @feed_items %> 
    </div> 
<% end %> 

부분 내 _feed입니다.

답변

0

아약스 요청이 두 번 트리거 된 것으로 보입니다. 응용 프로그램 js를 확인하고 js가 한 번만 포함되는지 확인하십시오. 트리를 요구하기보다는 명시 적으로 js를 요구한다.

+0

감사합니다. 오늘 밤 집에 올 때 이것을 확인합니다. – Abram

+0

나는 이것을 이해할 수 없을까 걱정된다. 내 application.rb 파일은 : // = require jquery // 요구 사항 jquery_ujs // = require_tree' – Abram

+0

// require_tree를 제거한 다음 자산에 util.js가 있으면 수동으로 모든 js를 요구합니다. // = like util.js가 필요합니다. – DeathHammer

관련 문제