0

在搜索结果页面上,我有使用 respond_to 和 format.js 的“添加到收藏夹”和“从收藏夹中删除”按钮部分,因此页面不会刷新,但页面会在显示“添加到收藏夹”和“从中删除”之间切换收藏夹”按钮部分。这很好用。

但是在用户的“我的收藏夹”页面和他们的个人资料页面上,如果用户单击“从收藏夹中删除”按钮,我确实想刷新页面,以便不再显示已删除的收藏夹。

我可以控制何时刷新页面(respond_to format.html)和何时切换按钮(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 %>
4

3 回答 3

1

你表单中的隐藏字段呢?像这样:

<%= hidden_field_tag :redirect_path, root_path %>

然后在你的控制器中:

params[:redirect_path]
于 2013-07-02T07:55:24.320 回答
0

我了解,您想调用 favourite#destroy 但希望在控制器中进行开关以指定 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
于 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_pathroutes.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 回答