在控制器中使用带有条件的paginate时出错nil

时间:2013-11-22 21:23:09

标签: ruby-on-rails ruby ruby-on-rails-2

我得到了这个错误“未定义的方法`paginate'为nil:NilClass”

这是我的表:

 policies
   id   num_policy   type_id    doc    name
    1        2323      1       181844  Charles
    2        2121      2       151511  Aguardientico
    3        3423      2       434344  Benjamin

这是我的控制器:

if params[:num_policy].present?
  @search= Policy.find(:all,:conditions=>['num_policy LIKE ?',params[:num_policy] ])
end

if params[:type_id].present?
  @search= Policy.find(:all,:conditions=>['type_id LIKE ?',params[:type_id] ])
end

if params[:doc].present?
  @search= Policy.find(:all,:conditions=>['doc LIKE ?',params[:doc] ])
end

if params[:name].present?
  @search= Policy.find(:all,:conditions=>['name LIKE ?',params[:name] ])
end

if params[:doc].present? and params[:type_id].present?
  @search= Policy.find(:all,:conditions=>['doc LIKE ? and type_id LIKE ?',params[:doc],params[:type_id] ])
end

@policies= @search.paginate( :page => params[:page], :per_page =>2)

这是我的观点

 <% @policies.each do |p| %>
   <%= p.num_policy %>
   <%= p.type_id %>
   <%= p.doc %>
   <%= p.name %>
 <% end %>

但是如果删除paginate我得到了这个错误“当你没想到它时你有一个nil对象! 您可能期望一个Array实例。 在评估nil.each“

时发生错误
 #controller
 @policies= @search

 #says that my line  <% @policies.each do |p| %>  is nil

我的条件似乎不适用于paginate

我也试过

 <% @search.each do |p| %>
   <%= p.num_policy %>
   <%= p.type_id %>
   <%= p.doc %>
   <%= p.name %>
 <% end %>

我发现这是使用条件,但不知道使用它

        # define what are the search keys that can be found in params[]
        search_keys = [:a, :b, :c, :d, :e, :f]

        # extract hash values that concern only the search criteria
        search_params = params.select { |k,v| search_keys.include? k and ! v.nil? and ! v.empty? }

        # Write query according to search criteria presents
        case search_params.keys.sort
          when [:a]
            # Write the query when only :a search criteria is present
            Something.where("blahblah = ?", params[:a])
          when [:a, :c]
            # Write the query when only :a and :c search criteria are present
            Something.where("a_field = ? AND stuff = ?", params[:a], params[:c])
          when ...
            ...
        end

请有人帮我这个吗?

我真的很感激帮助。

2 个答案:

答案 0 :(得分:1)

无论您是否使用paginate,这两种情况都会出现错误。

好像你的@search是nil(不属于任何if语句),用@l初始化@policies。因此,它无法在paginate上找到NilClass

<强>更新: 添加行

@search = Policy.all if @search.nil? 

@search ||= Policy.all

就在@policies= @search.paginate( :page => params[:page], :per_page =>2)行的上方。

这将验证这一预测。

答案 1 :(得分:0)

在您看来,我认为应该是@policies而不是政策。