基于param_name的js.erb文件中的if语句will_paginate(Ajax调用)

时间:2012-12-10 10:41:54

标签: ruby-on-rails ajax ruby-on-rails-3 jquery will-paginate

我正在尝试使用will_paginate Gem解决如何在同一页面上进行多个Ajax调用(相同的控制器Action)。到目前为止,我已经为每个实例变量赋予了自己的param_name,因此它们不使用默认的参数:page

示例控制器

@meats= Recipe.meat_recipes.paginate(:page => params[:meat_recipes], :per_page => 1)
@vegrecipes = Recipe.veg_recipes.paginate(:page => params[:veg_recipes], :per_page => 1)
@desserts = Recipe.dessert_recipes.paginate(:page => params[:dessert_recipes], :per_page => 1)

然后在视图中

 <%= will_paginate @meats,  :param_name => 'meat_recipes'  %> (repeat this for individual instance variables)

所以这部分很好。我正在做的是在AJAX请求是这样的时候加载部分

.js.erb文件

$('#meatRecipes').html('<%= escape_javascript(render partial: 'meatrecipes') %>');
$.setAjaxPagination();

所以目前我的肉类实例变量工作正常。那么如何根据params进行if语句呢?

我试过这个例子

<% if @meats %>
$('#meatRecipes').html('<%= escape_javascript(render partial: 'meatrecipes') %>');
$.setAjaxPagination();
<% end %>

<% if @vegrecipes %>
$('#vegRecipes').html('<%= escape_javascript(render partial: 'vegrecipes') %>');
$.setAjaxPagination();
<% end %>

也试过

<% if @meats[:param_name] == 'meat_recipes' %>
$('#meatRecipes').html('<%= escape_javascript(render partial: 'meatrecipes') %>');
$.setAjaxPagination();
<% end %>

<% if @vegrecipes[:param_name == 'veg_recipes' %>
$('#vegRecipes').html('<%= escape_javascript(render partial: 'vegrecipes') %>');
$.setAjaxPagination();
<% end %>

但这不起作用。所以我想我的问题是我用什么来确保为特定的分页部分调用正确的部分。

希望我已经正确解释了

1 个答案:

答案 0 :(得分:4)

好的,所以我需要将这个解决方案归功于@karl,但是这有效..除非有人有更好的方法吗?

 <% if params[:meat_recipes] %>
 $('#meatRecipes').html('<%= escape_javascript(render partial: 'meatrecipes') %>');
 $.setAjaxPagination();
 <% end %>

 <% if  params[:veg_recipes] %>
 $('#vegRecipes').html('<%= escape_javascript(render partial: 'vegeterianrecipes') %>');
 $.setAjaxPagination();
 <% end %>

 <% if  params[:dessert_recipes] %>
 $('#dessertRecipes').html('<%= escape_javascript(render partial: 'dessertrecipes') %>');
 $.setAjaxPagination();