2012-05-31 2 views
2

Railscast Episode 275 - How I test 사용자에게 암호 재설정을 전송하려면 다음 코드를 사용 end while User.exists?(column => self[column]) 그대로 잘 작동하지만에 내 사양의 원인 내가 왜 이런 일이 end while User.exists?(column: self[column])루비 해시 로켓 대 1.9 구문

Failure/Error: user.send_password_reset 
    ActiveRecord::StatementInvalid: 
    SQLite3::SQLException: no such column: users.column: SELECT 1 FROM "users" WHERE "users"."column" = 'Y7JJV4VAKBbf77zKFVH7RQ' LIMIT 1 

즉 해시 로켓에서 교환 할 경우 실패? 해시 로켓을 사용해야하는 상황이 있으며 이에 관한 지침이 있습니까?

답변

7

column 코드 줄은 기호가 아니기 때문에 변수이므로 해시 로켓을 사용해야합니다. column: self[column]은 키가 기호 :column 인 곳에서 해시를 작성하며, 원하는 값인 column 변수의 값이 아닙니다.

새로운 구문은 키에 리터럴 기호 (key: value 대신 :key => value)를 사용할 때의 바로 가기입니다. 가변 키를 사용하는 경우 => 구문이 여전히 필요합니다.

+0

감사합니다. 명확하게 설명하고, 10 분 내에 수락합니다. – stephenmurdoch

+4

기호뿐 아니라 유효한 기호 인 기호 만 사용하십시오. 예를 들어,': $ set'은 해시 테이블을 다른 많은 유효한 심볼처럼 요구합니다. http://stackoverflow.com/a/10004344/479863 –