2017-08-27 33 views
0

我在過濾系統上工作,並且與加載我的搜索結果的方式發生衝突。我使用jquery-infinite-scroll插件在用戶滾動時加載更多結果。因此,我有一個index.js.erb附加額外的結果:針對索引的Rails備用操作

$("#recipes").append("<%= escape_javascript(render 'recipe_card') %>"); 
<% if @recipes.last_page? %> 
    $('#paginator').html("No More Recipes"); 
<% else %> 
    $('#paginator').html('<%= escape_javascript(link_to_next_page(@recipes, "Next Page", remote: true).to_s) %>'); 
<% end %> 

當我嘗試實現我的過濾器時出現問題。我使用一個帶有用作搜索條件的複選框的表單。這裏是的form_tag:

<%= form_tag(recipes_path, :method => "get", id: "Filters", remote: true, html: {class: "form-horizontal"}) do %> 

問題是這樣使用相同指數的路線爲獲得裝有滾動的雷頁面。所以它附加了過濾結果而不是替換它們。我無法弄清楚如何添加一條路線來使用不同的控制器動作。我已經加入這個我的控制器:

def filter 
    @recipes = RecipeSearch.new(query: params[:search], options: params).search 
    end 

然後創建一個filter.js.erb文件:

$("#recipes").html("<%= escape_javascript(render 'recipe_card') %>"); 
<% if @recipes.last_page? %> 
    $('#paginator').html("No More Recipes"); 
<% else %> 
    $('#paginator').html('<%= escape_javascript(link_to_next_page(@recipes, "Next Page", remote: true).to_s) %>'); 
<% end %> 

就無法弄清楚如何將更改的form_tag路由到這一行動...我試過這個:

<%= form_tag(recipes_path, url: {action: 'filter'}, :method => "get", id: "Filters", remote: true, html: {class: "form-horizontal"}) do %> 

但它仍然進入控制器中的索引操作。

回答

1

form_tag的URL由recipes_path參數提供,因此根據您設置路由的方式,您需要更改該參數。

舉例來說,如果你設置了類似的路線:

resources :recipes do 
    get :filter, on: :collection 
end 

你應該有一個filter_recipes_path,你可以用它代替recipes_path。否則,您可以使用as:選項創建一個指定的幫助程序。最後,如果您不需要該路線的名稱助手,則可以使用:url_for。所以下面的一個應該工作:

form_tag(filter_recipes_path, method: 'get', ...) do 

form_tag(url_for(controller: :recipes, action: :filter), method: 'get' ...) do 
+0

的get:過濾器,上:集合是我一直在尋找。我嘗試過的其他東西都添加到了url/recipes /:recipe_id/filter中,這不是我想要做的。謝謝 – DRing