我在关注Ryan Bates的广播:http://railscasts.com/episodes/37-simple-search-form在解决我的问题与搜索结果的页面将分页
在这里他回答了如何解决这个问题。然而,我试过了,没有任何运气。从遵循他的第二个决议,我得到一个NoMethod错误为"search_conditions"作为结果。代码:
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方法中使用它。
课程。paginate(:all,:conditions => Course.search_conditions(..))
另一种方法是调用"paginated_search"方法,并让它调用"paginate"而不是"find"。
最后,您可以让搜索方法接受使用with_scope设置查找条件的块。这样,你就可以在该块中调用"paginate",条件就会自动应用。
谁能给我解释一下我应该怎么解决这个问题?我是rails的新手,也许我只是误解了他说的话。您所关注的Railscast是相当古老的,从那时起发生了很多变化。尝试像这样改变search
方法的实现:
def self.search(search)
if search
where 'name LIKE ?', "%#{search}%"
else
scoped
end
end
和类似的controller:
def index
@projects = Project.search(params[:search]).paginate(:page => params[:page])
end