2017-11-09 1 views
0

레일을 사용하여 여러 경로를 하나의 컨트롤러 동작으로 변환하는 더 깨끗하고 우아한 방법이 있는지 궁금합니다.ElegantRails - 하나의 컨트롤러에 대한 다중 경로 동작

#routes.rb 

get 'suggestions/proxy', to: 'suggestions#index' 
get 'suggestions/aimee', to: 'suggestions#index' 
get 'suggestions/arty', to: 'suggestions#index' 
... 

#suggestion_controller.rb 

case request.env['PATH_INFO'] 
when '/suggestions/proxy' 
    @suggestions = Suggestion.all.where(:suggestion_type => 'proxy') 
when '/suggestions/aimee' 
    @suggestions = Suggestion.all.where(:suggestion_type => 'aimee') 
when '/suggestions/arty' 
    @suggestions = Suggestion.all.where(:suggestion_type => 'arty') 
... 
else 
    @suggestions = Suggestion.all 
end 

나는이이 post을 읽었습니다,하지만 난 그것을 사용하는 경우 오류를 받고 있었다.

여기에 할 일이 많지 않으면 큰 문제는 아닙니다. 나는 비디오 게임에 웹 사이트를 구축하고 있는데, 나는 더러운 폭탄라고 불리며 총 19 개의 용병이 열거되어 있어야하기 때문에 더 깨끗한 방법을 원했기 때문이다.

감사합니다.

+0

[와일드 카드 세그먼트] (http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments)를 읽어야합니다. 그것은 당신이하고있는 일을위한 것입니다. – jvillian

답변

1

물론 있습니다. 경로에서 직접 매개 변수를 사용할 수 있습니다. 심지어 case 문을 사용하는 대신 쿼리에서 직접이 매개 변수를 사용할 수 있습니다.

#routes.rb 
 

 
get 'suggestions/:type', to: 'suggestions#index' 
 

 
# suggestions_controller.rb 
 

 
def index 
 
    @suggestions = Suggestion.where(suggestion_type: params[:type]) 
 
end
그것은 항상 오히려 경로 또는 요청 객체의 해석을하는 것보다, 매개 변수 후 컨트롤러 액션을 기반으로 더 좋은 습관이다

.

희망!

+0

안녕하세요, Rob! 검색어에 'all'을 사용할 필요가 없습니다. test : Suggestion.all.where (suggestion_type : params [: type]). to_sql 및 Suggestion.where (suggestion_type : params [: type]). to_sql은 동일한 SQL 문을 생성합니다. – smile2day

+0

아! 그래, 거기에 약간의 복사/붙여 넣기를하고 있었고 .all을 제거하는 것을 잊어 버렸다. 확실히 맞아. –

+0

이 하나가 나를 위해 완벽하게 일했습니다. – Student22

관련 문제