0

検索結果ページには、respond_to と format.js を使用する「お気に入りに追加」ボタンと「お気に入りから削除」ボタンのパーシャルがあるため、ページは更新されませんが、ページは「お気に入りに追加」と「お気に入りから削除」の表示を切り替えます。お気に入り」ボタンのパーシャル。それはうまくいきます。

しかし、ユーザーの「私のお気に入り」ページとそのプロフィールページで、ユーザーが「お気に入りから削除」ボタンをクリックすると、ページを更新して、削除されたお気に入りが表示されないようにします。

ページを更新するタイミング (respond_to format.html) とボタンを切り替えるタイミング (respond_to format.js) は、ローカル変数を remote: true (remote: @refresh_page) に使用されるパーシャルに渡すことで制御できますが、お気に入りコントローラーでは、 format.html は、redirect_to users_path に設定されています。

では、パーシャルからコントローラーの破棄アクション メソッドに変数を送信して、リダイレクト先を伝えるにはどうすればよいでしょうか?

ここに部分があります:

<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
  html: { id: "event_number_#{user_event.id}", method: :delete }, remote: @refresh_page) do |f| %>
  <%= f.submit "Remove from favorites %>
<% end %>
4

3 に答える 3

0

favourite#destroy を呼び出したいが、コントローラーのスイッチで redirect_to ターゲットを指定する必要があることは理解しています。

1 つの方法は、url パラメータまたは非表示フィールドとして追加情報を送信することです。

<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
  html: { id: "event_number_#{user_event.id}", method: :delete }, remote: @refresh_page) do |f| %>
  <%= hidden_field_tag :return_to, 'your_target' %>
  <%= f.submit "Remove from favorites %>
<% end %>

そしてあなたのコントローラーで

...
if params[:return_to]=='your_target'
  redirect_to 'where_ever'
else
  redirect_to users_path
end
于 2013-07-02T08:00:45.800 に答える
0

! コピー/貼り付け可能なコードではなく、単なる例であることに注意してください。

検索ページ

ここで、オブジェクトがすでにお気に入りリストにあるかどうかを確認する必要があります

  <div class="fav_toggle">
    <%= link_to "Add to favorites", toggle_favorites_path(object, action: 'toggle'), remote: true %>
  </div>

私のお気に入りのページ

  <div class="fav_toggle">
    <%= link_to "Remove from favorites", toggle_favorites_path(object, action: 'remove'), remote: true %>
  </div>

ポイントでtoggle_favorites_path言いましょうroutes.rbsome_controller#fav_toggle

def fav_toggle
  some logic here to check if fav exists or not and act as needed
  add/remove favorite
end

fav_toggle.js.erb

<% if params[:action] == toggle %>
  $('.fav_toggle').html('<%= link_to "Remove from favorites", add_to_favorites_path(object, action: 'toggle'), remote: true %>');
<% else %>
  $('.fav_toggle').fadeOut().remove();
<% end %>

このコードを機能させるには、このコードに取り組む必要があります。最終的には、期待どおりの結果が得られます。

于 2013-07-02T09:17:29.230 に答える