如何指定要刷新的页面

时间:2013-07-02 07:50:19

标签: ruby-on-rails ruby-on-rails-3

在搜索结果页面上,我有“添加到收藏夹”和“从收藏夹删除”按钮部分使用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 %>

3 个答案:

答案 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 %>

您需要使用此代码才能使其正常运行,最终您将得到您期望的结果。