0

私はライアン・ベイツのレールキャストをフォローしています:http://railscasts.com/episodes/37-simple-search-form 、will-paginateのあるページの検索結果に関する問題を解決しています。

ここで彼はこの問題をどのように解決するかについての質問に答えます。しかし、私はそれらを試しましたが、運がありませんでした。彼の2番目の解決策に従うと、結果として「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

彼の答え:

1つの方法は、クラスメソッド「search_conditions」を呼び出すことです。検索を実行する代わりに、条件配列を返すだけなので、paginateメソッドで使用できます。

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

もう1つは、メソッド「paginated_search」を呼び出し、「find」ではなく「paginate」を呼び出すようにすることです。

最後に、with_scopeを使用して検索条件を設定するブロックを検索メソッドに受け入れさせることができます。このようにして、そのブロックで「ページ付け」を呼び出すことができ、条件が自動的に適用されます。

誰かが私にこれを解決する方法を説明できますか?私はレールに不慣れで、彼の言っていることを誤解しているだけかもしれません。

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 に答える