2012-03-19 3 views
0

要素のコレクションを反復処理し、AJAXがコレクション内の特定の要素に対して正しく動作するようにしようとしています。これらの項目を反復処理し、このようjs.erbコールを使用するために、私はいくつかの部分音を入れ子にしています:Ruby on Rails AJAX呼び出しは、コレクションの最初の要素にのみ影響します。

$('#favorite_form').html("<%=j render partial: 'shared/unfavorite', locals: { mission: @mission } %>"); 
これが唯一の私が5日をクリックすることができていても、コレクションに 第一項目を変更するようだ

例えば、リストの下にある項目。

質問:どの要素を更新するか(.jsとAJAX経由で)どのように指定できますか?このjQueryの呼び出しは、個々の要素に十分なものではないのですか?コードは、通常のHTTPリクエストで動作するので、個々の要素を指定する方法がある場合、私は思ったんだけど、私はそれがパーシャルがやったことだと思った:あなただけのアイテムを更新しようとしている場合は/

Example View (_favorites.html.erb) 

<div id="favorite_form"> 
    <% if you_favorited_this?(current_user, mission) %> 
    <%= render partial: 'shared/unfavorite', locals: { mission: mission } %> 
    <% else %> 
    <%= render partial: 'shared/favorite', locals: { mission: mission } %> 
    <% end %> 
</div> 
+2

ID「favorite_form」の複数のdivがありますか? IDは一意でなければならず、多くの場合はクラスを使用します。 – mdarwi

+0

特に '$( '#favorite_form')'は、ページ内のそのIDの最初の出現としか一致しません。あなたのdivをクラス – xkickflip

+0

@xkickflipに変えれば、 '$( '。favorite_form')'はそれらをすべて取得します。それをクラスに変更した、あなたが正しい、彼らはすべて変化する!残念ながら、これは望ましい結果ではありません。一意のクラス名で各要素を一意に識別することをお勧めしますか?私は良い方法がなければならないことを知っています。 – pruett

答えて

2

あなたの問題はセレクターの特異性のようです。便利なことの1つは、div_fordom_idを使用することです。だから、例えば、あなたが「ミッション」胸が張り裂けるしているように見えることから:あなたのJSで

# mission partial 
<%= div_for mission do %> 
    ...the rest of the partial... 
<%= end %> 

を、その後のようなものを使用します。

$('#<%= dom_id @mission %>').html("<%=j render partial: 'shared/unfavorite', locals: { mission: @mission } %>"); 

あなたは少しあなたのマークアップを微調整する必要があるかもしれませんが、これはあります多くのレコードが同じページにあるときに、指定したレコードに必要なセレクタを取得するための非常に良い方法です。

+0

素晴らしい...何か新しいことを学んだ!仲間に感謝する – pruett

0

あなたはこのような何かを試すことができ、上のクリック:

$(".favorite_form").click(function() { 
    $(this).html("<%=j render partial: 'shared/unfavorite', locals: { mission: @mission } %>"); 
}); 

実際にクリックされた要素のみを参照しますコールバック関数でthis

関連する問題