2013-06-04 3 views
0

내 사이트의 페이지에 링크가 3 개 나열되어있어 매개 변수를 변경해야합니다. 링크는 다음과 같습니다 I 페이지 새로이에서 단지 coasters_path 또는 /coasters로 이동하여 철강 링크를 클릭하면레일 매개 변수가 고집하지 않음

 ul 
     li = link_to "View all", coasters_path 

     ul 
     li 
      - if params[:type] == "steel" 
      - params.delete :type 
      = link_to "Steel", coasters_path(params) 
      - else 
      = link_to "Steel", coasters_path(params.merge({type: "steel"})) 

     li 
      - if params[:type] == "wood" 
      - params.delete :type 
      = link_to "Wooden", coasters_path(params) 
      - else 
      = link_to "Wooden", coasters_path(params.merge({type: "wood"})) 

     li 
      - if params[:type] == "powered" 
      -params.delete :type 
      = link_to "Powered", coasters_path(params) 
      - else 
      = link_to "Powered", coasters_path(params.merge({type: "powered"})) 

     ul 
     li 
      - if params[:letters] == "#" 
      - params.delete :letters 
      = link_to "#", coasters_path(params) 
      - else 
      = link_to "#", coasters_path(params.merge({letters: "#"})) 

     li 
      - if params[:letters] == "a-e" 
      - params.delete :letters 
      = link_to "A-E", coasters_path(params) 
      - else 
      = link_to "A-E", coasters_path(params.merge({letters: "a-e"})) 

     li 
      - if params[:letters] == "f-j" 
      - params.delete :letters 
      = link_to "F-J", coasters_path(params) 
      - else 
      = link_to "F-J", coasters_path(params.merge({letters: "f-j"})) 

     li 
      - if params[:letters] == "k-o" 
      - params.delete :letters 
      = link_to "K-O", coasters_path(params) 
      - else 
      = link_to "K-O", coasters_path(params.merge({letters: "k-o"})) 

     li 
      - if params[:letters] == "p-t" 
      - params.delete :letters 
      = link_to "P-T", coasters_path(params) 
      - else 
      = link_to "P-T", coasters_path(params.merge({letters: "p-t"})) 

     li 
      - if params[:letters] == "u-z" 
      - params.delete :letters 
      = link_to "U-Z", coasters_path(params) 
      - else 
      = link_to "U-Z", coasters_path(params.merge({letters: "u-z"})) 

문제는, 즉 유형 = 강하므로 PARAMS은 괜찮?. 그런 다음 A-E를 클릭하면 params가 type = steel을 삭제하고 letters = a-e로 바꿉니다.

내가 강철로 뒤따라 A-E를 먼저하면, 글자 = a-e가 추가되고 & 유형 = 강철이 끝에 붙어 필터가 연결됩니다.

왜 이런 일이 발생하고 어떻게 해결 될 수 있는지 알고 싶습니다. 코드에 문제가없는 것 같습니다.

답변

1

문제는 당신이 따라갈 때 params 해시를 돌연변이시키고 있다는 것입니다. 강철 페이지에있을 때 params에서 :type을 바로 삭제하므로 편지를 렌더링 할 때 해시가되지 않습니다 모래밭.

나는 당신이 무엇을하려고하는지 완전히 이해하지 못한다. 그러나 나는이 나쁜 형 태처럼 params 해시를 변형시키는 것을 고려할 것이다. 그것은 또한보기에 모든 조작을 지저분 해합니다. 당신이 다음 업데이트 된 복사본을 반환하는 도우미 메서드를 작성하는 PARAMS을 조작해야하는 경우

, 예를 들어, 당신은 그런 당신이보기에 문을 그냥 쓰는 경우 그 제거 할 수

def params_skipping_type type_to_skip 
    if params[:type] == type_to_skip 
    params.except(:type) 
    else 
    params.merge(:type => type_to_skip) 
    end 
end 

뭔가를 작성할 수 있습니다

+0

확인해 보겠습니다. params 해시를 변경하는 대신이 작업을 어떻게 수행 할 수 있습니까? 기본적으로 링크는 두 섹션에 있습니다. 유형과 글자, 강철을 클릭하면 컵 받침에는 강철 만 표시됩니다. 그런 다음 철강을 다시 클릭하면 매개 변수에서 강을 제거하고 다시 표시해야합니다. 당신이 나무를 클릭했다면, 타입 필터는 이제 모든 나무를 보여줄 것입니다. 편지는 같은 방식으로 작동합니다. 그래서 Filteres는 켜거나 꺼야합니다. 유형 섹션과 글자 섹션 당 하나의 필터 만 사용할 수 있습니다. – rctneil

+0

내가 게시 한 코드는 어떻게 할 수 있는가? params 해시가 업데이트 된 복사본을 반환하는 도우미 메서드를 작성합니다. –

+0

절반이 작동합니다. 문제는 유형이 말하고 나무로 설정되어 링크가 어디로 갈지를 보면 스틸 링크가 나무 = 유형으로 가고 나무 링크가 전혀 유형이없고 전원 링크가 나무 = 유형으로 이동한다는 것입니다 . 동일한 유형을 현재 선택되어있는 상태에서 클릭 한 다음 유형을 매개 변수에서 제거해야합니다. 다른 유형을 클릭하면 유형이 새 유형으로 전환되어야합니다. – rctneil

관련 문제