2013-07-02 50 views
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 %> 
+0

你爲什麼要用'form'來添加/刪除/從收藏夾中刪除?一個'link_to'一個動作就足夠了我想,在這個鏈接中你將使用'remote:true'作爲ajax,並且發送你需要的任何參數,但是當你使用ajax時你不需要重定向,只需添加'action_name.js.erb'文件中的適當的js將一個部分替換爲另一個部分。 – rmagnum2002

+0

正如我在我的問題中所說的,在搜索結果頁面上我不想刷新,而是在添加和刪除按鈕之間切換,並且工作正常。但在我的收藏夾頁面上,我確實想要刷新,所以收藏夾將完全消失。我想我可以不刷新,只是更新用戶的收藏夾,但這意味着不同的format.js比用於切換按鈕。所以我需要不同的行爲,具體取決於部分使用的位置。我試圖幹掉。 –

+0

所以你只需要刷新從列表中刪除偏好的對象,並且你可以使我的例子中的喜好消失,在你的action.js.erb文件中,你將不得不使用javascript去除最喜歡的div是這樣,當你點擊從收藏夾中刪除時,js將從頁面中刪除該元素。 – rmagnum2002

回答

0

我明白了,你要調用喜愛#破壞,但想在你的控制器切換到指定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 
+0

我認爲你的建議將工作,但首先我需要回答這個問題:http://stackoverflow.com/questions/17420729/how-can-i-control-form-submit-remote-with-variable因爲我需要有remote:當部分頁面被使用,而不是其他頁面時,使用remote。然後,當我使用您的答案時,我需要能夠通過頁面重定向到,因爲這也會有所不同。 –

1

怎麼樣在表單中的隱藏字段?像這樣:

<%= hidden_field_tag :redirect_path, root_path %> 

然後在你的控制器:

params[:redirect_path] 
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 %> 

,您需要在此代碼的工作得到它的工作,你到底會得到你的期望。