2012-05-10 7 views
4

私はこれまで何度も検索してきましたが、これがなぜ機能していないのか理解できません。Rails 3.2.x remote => trueはまだページをリロードします

私は非常に基本的なAjaxアクションをテストしようとしています。ここに私のコードです:

コントローラー:

def commit 
    respond_to do |format| 
     format.html { redirect_to :action => "index" } # see note 1 
     format.js { render :layout => false } # see note 2 
     format.js { render :nothing => true } 
    end 
end 

ビュー:

<%= link_to "commit", :action => "commit", :remote => true %> 
<%= form_tag(:action => "commit", :remote => true, :method => :post) do %> 
    <%= submit_tag "commit" %> 
<% end %> 

<div id='message'></div> 

commit.js.erb

console.log('committed'); 
$('#message').html("committed"); 

問題は、私はcommitメソッドを取得したいですしかし、ページがリロードされると、remote => trueの点を打ち負かす また、commit.jsはcaだまされた。

注1:この行を除外すると、空白のページが/ commitになります。私は他のSOの記事
注3によって提案されたこれらのアプローチの両方試してみた:それはページがちょうど
注2リロードせ含め、私が使用してのlink_toとform_tag両方

を試してみたことは誰もが助けることはできますか?ありがとう!

答えて

4

なぜ2行ありましたか?

format.js { render :layout => false } # see note 2 
    format.js { render :nothing => true } 

2番目のものを削除してください。

置き換えます

<%= link_to "commit", :action => "commit", :remote => true %> 

で:フォームと同じ

<%= link_to "commit", commit_path, :remote => true %> 


<%= form_tag(:action => "commit", :remote => true, :method => :post) do %> 

として:

をお使いください:

<%= form_tag(commit_path, :remote => true) do %> 

注:POSTはあなたがform_tagからそれを省略することができ、デフォルトの動作です。

+0

私は見る! format.jsのどちらの引数もうまくいきますが、私はパスの代わりに:action!を渡す必要があります。ありがとう! – Jason

+0

このようにしてください: ':action'はパスを定義し、':remote'はその処理方法を定義します。それらをまとめるのは変です。 ':remote'を' params'に渡すには?それは混乱するだろう! – jdoe

関連する問題