2013-11-20 1 views
1

두 달 전에 레일로 시작했지만 여전히 좋아하지만 큰 문제가 하나 있습니다. 레일 형태의 해시가 많이 사용됩니다.레일 해시 사용량이 많음 ... 설명이 필요합니다.

할 수있는 방법이 너무 많습니다. 해시에 따라 예제를 많이 보았지만 항상 다른 synstax입니다.

일부는 내가 항상 그들을 혼합 구문 오류가 많이 얻을이

:foo => :bar 
foo: :bar 
"foo" => "bar" 

처럼 쓰기, 누군가가 나에게 어떻게 그렇게하는 올바른 방법을 설명 할 수 있습니까?

이 기호는 :foo입니다. 바로 "foo"과 같습니다.

또한 : form_tag(@something)이 있다면 html 요소에 액세스하려면 대괄호를 사용해야하는 이유는 무엇입니까? like form_tag(@something, :html => {:foo => :bar})

누군가 설명 할 수 있습니까?

감사

+1

": foo : bar"가 아닌 ": foo => : bar"와 같은 "foo : : bar"입니다. 친절하고 쉽게 설명 된 –

답변

4

해시 로켓 =>는 해시를 구축하는 원래의 방법입니다. 이후 버전의 Ruby에서는 키가 심볼 인 경우 JSON과 유사한 콜론 기반 구문을 도입했습니다. 그래서 :foo => :barfoo: :bar은 동일합니다 (다윗 위의 의견에서 지적했듯이, 당신은 당신의 질문에 "foo는"잘못된 측면에 결장했다.)

=> 여전히 특정에 대한 해시를 정의 할 수있는 유일한 방법입니다 사용 열쇠의 종류 (참조 : Is Hash Rocket deprecated?). 따라서 처음 시작할 때 차이점을 느낄 때까지 =>을 붙이는 것이 좋습니다.

레일스를 처음 접했을 때 혼란 스러울 수있는 다른 한 가지는 ActiveSupport가 :foo"foo"을 동일한 키로 취급하는 HashWithIndifferentAccess이라는 개체를 제공한다는 것입니다. 이것은 일반적인 Ruby Hash 객체에는 해당하지 않습니다. 그래서 당신이 다루고있는 객체의 클래스를 확인하십시오.

:html 옵션이 괄호 안에 들어있는 이유는이 값이 중첩 된 해시이기 때문에 누군가가 form_for과 같은 메서드를 정의하고 여러 개의 다중 값 입력을 허용하기 쉽기 때문입니다.

+0

. 감사 – user3008711

관련 문제