0

我正在关注 Ryan Bates 的 railcasts: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”,而不是让它进行查找,它只会返回一个条件数组,以便您可以在分页方法中使用它。

Course.paginate(:all, :conditions => Course.search_conditions(..))

另一种是调用方法“paginated_search”并让它调用“paginate”而不是“find”。

最后,您可以让搜索方法接受一个使用 with_scope 设置查找条件的块。这样,您可以在该块中调用“分页”,并且将自动应用条件。

有人可以向我解释我应该如何解决这个问题吗?我是 Rails 新手,也许我只是误解了他在说什么。

4

1 回答 1

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
于 2011-09-06T11:39:24.073 回答