0

라이언 베이츠의 레일 캐스트를 따르고 있습니다 : http://railscasts.com/episodes/37-simple-search-form 페이지의 검색 결과에 내 문제를 해결할 예정입니다.페이지 매김과 함께 사용되는 간단한 검색 양식을 구현하는 방법은 무엇입니까?

여기에서 그는이 문제를 해결하는 방법에 대한 질문에 대답합니다. 그러나, 나는 그들을 시험해 보았고 행운이 없었다. 두 번째 해결 방법을 따르면서 "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 (: 모든 : 조건 => Course.search_conditions (...)) 또 다른 방법 "paginated_search '이라고하고 대신"찾기 "의"페이지를 매기는 "호출하도록

이다.

마지막으로 검색 방법에 with_scope를 사용하여 찾기 조건을 설정하는 블록을 허용 할 수 있습니다. 이렇게하면 해당 블록에서 "페이지 매김"이라고 부를 수 있으며 조건이 자동으로 적용됩니다.

누군가가이 문제를 해결하는 방법을 설명 할 수 있습니까? 나는 레일을 처음 사용하고 있으며, 아마도 그가 말하는 것을 오해하고있을 수도 있습니다.

답변

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 
+0

오 스냅! 그것은 완벽하게 작동했습니다! 감사! – Tony

+0

Thinking Sphinx와 같은 시스템을 구현하는 대신 사용자가 데이터베이스의 문자열/열의 모든 인스턴스를 검색 할 수있는 코드를 변경할 수 있습니까? 예 : ''연도가 좋아? ', "% # {search} %"'는 문자열 "year"(그러나 그 문자열 만)을 검색 할 수있게합니다. 그러나 한 번의 검색으로 "연도"와 "이름"을 모두 검색하고 다른 문자열도 검색하려고합니다. – Tony

+2

@ 토니 예, 가능합니다 : '연도 LIKE : 검색 OR 이름 LIKE : 검색', : 검색 => "% # {검색} %" ' –