2012-01-16 6 views
0

config/routes.rb 파일에서 모델을 사용하려면 어떻게해야합니까? 내가 이루고자하는 목표는 다음과 같습니다.모델을 사용한 레일스 라우팅

match '/:name', :topic => Post.where(:topic => name).first, :to => 'posts#search' 

이 가능합니까?

답변

1

@Michael 잘입니다 - 루트 파일에 데이터베이스 코드를 삽입하지 않습니다. 물론, 가능하지만 레일 협약 및 원칙에 위배됩니다.

더 나은 방법은 다음과 같습니다

= form_tag(search_posts_path, :method => :get) do 
    = text_input_tag(:q) 

그리고 컨트롤러 :

def search 
    @posts = Post.where("body like ?", "%#{params[:q]}%") 
end 

참고 일반적으로 사용하는 것을

resources :posts do 
    collection { get :search } 
end 

검색 양식을 다음과 같이 보일 것입니다 페이지 매김 (will_paginate 또는 kaminari)도 있으며, 전체 텍스트 검색 엔진을 고려할 수도 있습니다. 스핑크스.

1

라우트는 모델이 아닌 컨트롤러에 대한 것입니다. 게다가 나는 그런 경로에 주제 선택을 두지 않는 것이 좋습니다. 대부분의 레일을 올바르게 만드는 것은 올바른 영역에서 올바른 일을하는 것입니다.

표준 및 REST 기반 시스템은 그들이 종종 동일하다는 경향이 있습니다. 포스트 컨트롤러는 애플 리케이션/뷰/포스트에있는 뷰가있는 포스트 모델에 대한 레코드를 관리하지만 다른 것들입니다.

/:name이 게시물로 이동하려면 # 검색은 괜찮습니다. 그러나 질문의 ​​주제를 얻는 것이 게시물 컨트롤러 내에서 이루어져야한다고 생각합니다. 검색이 게시물 내에있는 경우 당신은 당신의 경로에 중첩 자원과 같이 사용할 수 있습니다

resources: :topics do 
    resources :posts, :member => :search 
end 
관련 문제