我得到了这个错误“未定义的方法`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
请有人帮我这个吗?
我真的很感激帮助。
答案 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而不是政策。