在搜索结果页面上,我有“添加到收藏夹”和“从收藏夹删除”按钮部分使用respond_to和format.js,因此页面不刷新,但页面在显示“添加到收藏夹”之间切换, “从收藏夹删除”按钮部分。这很好。
但是在用户的“我的收藏”页面及其个人资料页面上,如果用户点击“从收藏夹中删除”按钮,我确实要刷新页面,以便不再显示已删除的收藏夹。
我可以通过将本地变量传递给部分用于远程:true(远程:@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 %>
答案 0 :(得分:1)
表单中的隐藏字段怎么样?像这样:
<%= hidden_field_tag :redirect_path, root_path %>
然后在你的控制器中:
params[:redirect_path]
答案 1 :(得分:0)
据我所知,你想调用最喜欢的#dump,但想在控制器中设置一个开关来指定redirect_to目标。
一种方法是以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
答案 2 :(得分: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.rb
指向some_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 %>
您需要使用此代码才能使其正常运行,最终您将得到您期望的结果。