1

私は最近 Rails 3.2 を使い始めましたが、アプリにいくつかの ajax 機能を実装しようとしているときに立ち往生しています。この railscast を完全にフォローしました (http://railscasts.com/episodes/240-search-sort-paginate-with-ajax)。これを超えて、各製品にショートリスト ボタンを実装し、ユーザーが製品をショートリストしてセッションに保存できるようにしたいと考えています。また、最終選考に残った製品の小さなリストを同じページに表示したいので、ajax を更新する必要があります。

私はそれを行うための最良の方法は何だろうと思っています。現在、リンクをショートリスト/非ショートリストに変更するために、リモート タグとヘルパー関数を使用して link_to ボタンを実装しています。また、条件付き div を使用して、ショートリストの長さに基づいてショートリストを表示しました。ただし、問題は、ショートリストを作成するたびに、products テーブルの順序もリセットされることです。

ここに私のコードのスニペットがあります:-

Application_helper.rb

def shortlist_unshortlist_link(product_id )
  if (user_session.already_shortlisted? product_id )
    link_to 'Unshortlist', { action: 'unshortlist', id: product_id  }, remote => 'true'
  else
    link_to 'Shortlist', { action: 'shortlist', id: product_id  }, remote => 'true'
  end
end


def shortlist_div
  shortlist=user_session.shortlist
   if (user_session.shortlist.length > 0)
     render :partial => 'pages/shortlist_fields'
   end
end

製品/index.html.erb

<div id="product">
 <% @products.each do |product| %>
<tr>....
<td><%= shortlist_unshortlist_link(product.id.to_s) %></td>
</table>
</div>
<div class="shortlist"><%= shortlist_div() %> </div>

products_controller.rb

def shortlist
 user_session.add_to_shortlist(params[:id])
 redirect_to products_path
end

def unshortlist
 user_session.remove_from_shortlist(params[:id])
 redirect_to products_path
end

問題はredirect_toが原因だと思いますが、機能を損なわずにこれを回避する方法がわかりません。私はここで完全に間違った道を進んでいますか?これはこれを実装する良い方法ですか。助言がありますか。

ありがとう、アミット

4

2 に答える 2

0

ショートリスト方式で使用する必要があります。

respond_to do |format|
  format.html {redirect_to products_path }#shortlist.html.erb
  format.js #shortlist.js.erb
 end

Java スクリプトを #shortlist.js.erb ファイルに書き込みます。

unshortlist で同じことを行います。

于 2012-12-02T16:26:34.637 に答える
0

からの ajax リクエストに応答しなかった Sush に同意しますlink_to

コントローラーで、ショートリスト メソッド、ajax リクエストへの応答

respond_to do |format|
  format.html {redirect_to products_path }
  format.js 
end

Rails の慣例によりformat.js、メソッドと同じ名前の js.erb ファイルが実行されます。

また、shortlist.js.erb では、次のように記述できます。

$('#shortlist').html('<%= escape_javascript(render "pages/shortlist_fields")%>');

また、同じ js.erb ファイルを呼び出すこともできます。

unshortlist メソッドでは、次のように実行できます。

respond_to do |format|
  format.html {redirect_to products_path }
  format.js {render :action=>'shortlist'}
end
于 2012-12-02T17:19:26.277 に答える