2012-02-15 3 views
2

난 레일 3 애플 리케이션을 가지고 지금 내 카탈로그에 대한 필터를 구현. 필터는 GET 요청을 통해 컨트롤러에 데이터를 전달합니다.레일 3 - 친절한 params in URL (GET)

http://localhost:3001/shoes?filter%5BShoeBottomType%5D%5B%5D=2&filter%5BShoeClassification%5D%5B%5D=1&filter%5BShoeClassification%5D%5B%5D=2&filter%5BShoeElation%5D%5B%5D=3&filter%5BShoeElation%5D%5B%5D=4&filter%5BShoeElation%5D%5B%5D=5&filter%5BShoeLiningColor%5D%5B%5D=2&filter%5BShoeLiningColor%5D%5B%5D=3&filter%5BShoeLiningColor%5D%5B%5D=4&filter%5BShoeTopColor%5D%5B%5D=1&filter%5BShoeTopColor%5D%5B%5D=2&filter%5Bonly_action%5D%5B%5D=1&page=2 

이 URL이 더 아름다운 할 수있는 방법이 있나요 : 내가 내 양식 (해당 검색)를 제출 한 후 그 결과 난 내 브라우저에서이 같은 링크가? 나는 그것이 SEO

답변

7

TLDR : 그대로 두십시오.

HTML 양식은 간단한 방식으로 일련 화됩니다. 매개 변수는 HTML 요소 다음에 이름이 지정됩니다. 실제 문제는 양식 요소의 이름 지정 방법입니다. 이름이 filter[ShoeBottomType][] 인 것 같습니다. HTML을보고 name 속성을 확인하십시오. 레일즈에 있기 때문에 Rails 컨트롤러 메소드에 전달되는 필터 해시를 하나의 인수로 사용하고 Rails가 해시에서 특정 URL을 사용하기를 기대하기 때문에 해시와 배열에 대해 format (역 직렬화하는 방법을 알고 있어야한다. 양식 요청자가 양식에서 그런 식으로 씁니다. 해시 값은 배열이므로 대괄호가 필요하기 때문에 특히 복잡합니다. 그런 다음 URL 인코딩되고 추악한 엉망으로 끝납니다.

큰 해시 대신 컨트롤러에 입력을 개별적으로 전달하여 이러한 문제를 피할 수 있습니다. 다음과 같이 입력하십시오 :

def index 
    shoe_bottom_types = params[:bottom_types] 
    shoe_classifications = params[:classifications] 
    shoe_elations = params[:elations] 
    ... 

/shoes?bottomTypes[]=1&bottomTypes[]=2.... 그것은 훨씬 좋아 보이지 않는데, 이제 컨트롤러가 총체적입니다. 그리고 동일한 필터를 두 개 이상 갖고 싶다면 어떻게하면 괄호를 완전히 없앨 지 알 수 없습니다. 나는 당신이 미친 듯이 내고 shoeBottomTypes=1|2을 깨는 것처럼 당신의 컨트롤러에서 당신 자신의 파싱을 할 수 있다고 생각합니다, 그렇지만 당신은 자신 만의 폼 직렬화를해야 할 것입니다. 다시 한번, 그만한 가치는 없습니다.

초 동안 백업, SEO 물건은 많은 의미가 없습니다. 검색 엔진은 양식을 작성하지 않습니다. 그들은 단지 링크를 따라 간다. GET을 사용해야하는 진정한 이유는 단지 검색 일 뿐이므로 양식을 제출하는 데 부작용이 없다는 것입니다. here; 올바른 HTTP 메소드를 사용하는 것이 중요합니다. POST를 사용하면 다시로드 할 때 이상한 경고가 표시되며 검색을 북마크에 추가 할 수 없습니다.

백업은 더욱 그렇습니다. 특히 SEO가 꺼져 버린 지금은 왜 신경을 씁니까? 그냥 빨리 데모로, 나는 단어 "일"에 대한 구글 검색을했고, 이것은 URL이었다

https://www.google.com/#hl=en&output=search&sclient=psy-ab&q=thing&pbx=1&oq=thing&aq=f&aqi=g2g-s1g1&aql=1&gs_sm=3&gs_upl=764l1877l0l1980l6l6l0l0l0l0l89l432l5l5l0&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.,cf.osb&fp=220ef4545fdef788&biw=1920&bih=1086

그래서 폼 제출에 대한 URL이 길어질 수 있습니다. 사용자는 심지어 보지 않을 것입니다.

여기에 URL의 길이/추함을 신경 쓰는 이유는 폼과는 별도로 특정 검색에 대한 링크를 만들려는 것입니다. 이를 처리 할 수있는 방법은 여러 가지가 있지만, 내가 당신과 관련이 있는지 여부를 알지 못하기 때문에이를 후속 조치로 알려 드리겠습니다.

결론적으로 나는 기대했던 것처럼 보였고 추악하고 무의미한 소리를 고치려고 노력했습니다.

0

당신은 POST 요청을 사용하지 않으려면 나쁜 것을 읽을 수 있기 때문에

PS 내가 사용 POST 요청을 싶지 않는 한 다음에 양식 값을 넣어 다음 다른 방법이 없습니다 URL - 서버에 어떤 방식 으로든 도달해야합니다.

그러나 다른 한편으로는 나는 POST를하는 것이 SEO에 좋지 않을 것이라고 생각하지 않는다. 나는 그렇게 말하는 기사를보고 싶다.

+0

예를 들어 방문자가 사이트를 방문하고 일부 필터를 선택한 다음 결과를보고 그/그녀/그녀의 친구에게 공유 (링크 받기)를 원합니다. looooong 링크가있는 내 변형에서 친구가이 링크를 열면 동일한 결과가 표시됩니다. POST를 통해 작동하는 경우 링크는 http : // localhost : 3001/shoes와 같으며 친구는 필터링하지 않고 모든 결과를 볼 수 있습니다. 나는 분명히 설명하기를 희망한다. –

+0

URL에 필터를 넣는 대신 폼 (또는 결과)을 데이터베이스에 저장하고 일종의 영구 링크 메커니즘 ('http : // localhost/shoes? filter = 25'). 어느 쪽이든, 나는 이것이 어떻게 SEO에 영향을 미칠지는 모르겠다. 나는 여전히 이렇게 말하는 기사를보고 싶다. – Laurens

+0

나는 will_paginate gem을 사용합니다 (예 : 그림과 같이 링크를 표시합니다). 그래서 will_paginate + ajax를 사용해보십시오. –

0

내 제안은 URL을 아름답게 꾸미기위한 맞춤 경로를 추가 할 수 있다는 것입니다.

예를 들어

: http://localhost:3001/shoes/Type/2/Classification/1,2/Elation/3,4,5/LiningColor/2,3,4/TopColor/1,2/only_action/1/page/2

이것은 초기 URL보다 훨씬 더 짧은)

대응까지 내가 아는 한, 당신이 PARAMS 항상 같은 순서를 사용해야한다는 것입니다 당신의 URL.

match "shoes/Type/:type/Classification/:classification/Elation/:elation/LiningColor/:liningcolor/TopColor/:topcolor/only_action/:only_action/page/:page" => "shoes#show" 

당신은 params 배열에 전달 된 값을 검색 할 수 있습니다

라우팅 규칙은 다음이다. 여러 값을 검색하려면 ,이 포함 된 문자열을 분할해야합니다.

+1

사용자 지정 직렬화/문자열 분할 경로를 사용하는 경우 URL 매개 변수 'shoes? type = 2 & classification = 1,2 & elation = 3,4,5'를 사용해야합니다. 그러면 맞춤 경로와 이상한 주문 제약 사항을 줄일 수 있습니다. 또한 아마도 필터는 선택 사항입니까? –

+0

전적으로 동의합니다. –