我关注瑞安贝茨的铁路广播:http://railscasts.com/episodes/37-simple-search-form 用will-paginate在页面上解决搜索结果的问题。
他在这里回答了如何解决这个问题的问题。但是,我尝试过它们并没有任何运气。从他的第二个决议开始,我得到了“search_conditions”的NoMethod错误。
守则:
projects/index.rhtml
<% form_tag projects_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
projects_controller.rb
def index
@projects = Project.search(params[:search])
end
models/project.rb
def self.search(search)
if search
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
find(:all)
end
end
他的回答:
一种方法是调用类方法“search_conditions”,而不是让它执行查找,它只返回一个条件数组,以便您可以在paginate方法中使用它。
Course.paginate(:all,:conditions =&gt; Course.search_conditions(..))
另一种方法是调用方法“paginated_search”并让它调用“paginate”而不是“find”。
最后,您可以让搜索方法接受使用with_scope设置查找条件的块。通过这种方式,您可以在该块中调用“paginate”,并自动应用条件。
有人可以向我解释我应该如何解决这个问题?我是铁路新手,也许我只是误解了他说的话。
答案 0 :(得分:3)
Railscast你跟随的是相当古老的,从那以后发生了很多变化。尝试更改search
方法的实现,如下所示:
def self.search(search)
if search
where 'name LIKE ?', "%#{search}%"
else
scoped
end
end
在控制器中有类似的东西:
def index
@projects = Project.search(params[:search]).paginate(:page => params[:page])
end