2009-11-29 2 views
2

경로 지정Rails : link_to에 값없이 매개 변수 지정

map.resources :articles 

link_to 방법을 사용하여이

/articles?most_popular 

을 얻는 방법은 무엇입니까?

다음을 시도 :

link_to articles_path(:most_popular) # exception 
link_to articles_path(:most_popular => nil) # /articles 
link_to articles_path(:most_popular => true) # /articles?most_popular=true 

참고 : inherited_resourceshas_scope

함께 사용하고 있습니다.

답변

3

을 당신이 PARAMS 섹션 형태 field=value을 가지고 의무화 W3C의 표준을 존중되지 않습니다 매개 변수에 값을 추가하지 마십시오.

기사 컨트롤러에 most_popular 액션을 새로 추가하는 것이 좋습니다. 귀하의 의견에

class ArticlesController < ApplicationController 
... 
def most_popular 
    @articles = ... 
end 

:

link_to most_popular_articles_path() # /articles/most_popular 

이 HTML 호환 될 것입니다, 당신의 URL을 모양을 컨트롤러에

map.resources :articles, :collection => {:most_popular=>:get} 

: 당신의 routes.rb에

실질적으로 동일합니다 (하나씩 /로 변경) 컨트롤러가 단순화 될 것입니다 (가장 많은 액션을 별도로 색인에서 d).

감사합니다.

업데이트 : (2017) : W3C 표준은 field=value 구문을 명령하지 않으며 더 이상 필요하지 않습니다. 그러나 일부 서버는이 구문을 준수하지 않는 쿼리에 "숨 막히게"문서화되어 있습니다. 자세한 내용은 Is a url query parameter valid if it has no value?을 참조하십시오.

+0

정확히 이렇게 코드를 작성합니다. 그러나 최근에 내 코드를 리팩토링하기 시작했고 어떻게하면 좋을지 궁금해하고이 방법을 재촉했다. "가장 인기있는"색인 대신 오히려 질의 옵션 필터 (필터 = most_popular) – gorn

+1

안심은 CRUD 전용이 아닙니다. 즉, 모든 URL이 리소스로 사용될 수 있음을 의미합니다. 질문은 : 자신의 리소스를받을 자격이 일반 기사와 다른 가장 인기있는 기사입니까? 대답은 "나는 CRUD가 있어야합니다"가 아닙니다. 그것은 "응용 프로그램에 따라 달라집니다"입니다. 중요하지 않은 경우 필터 매개 변수를 추가하는 것으로 충분합니다. 그들이 매우 중요하다면, 그들은 아마도 자신의 컨트롤러를 받아야 할 것입니다. 내 솔루션은 중간입니다. – kikito

+0

네, 매우 통찰력이 있습니다. 고마워요 – gorn

1

와 함께 당신이 마지막 예를 inherited_resources을 사용하고 있습니다. 그렇지 않으면 당신은 손으로 링크를 만들 수 있습니다 :

<a href="<%= articles_path %>?most_popular">articles</a> 
관련 문제