ActiveRecord의find에서'123ABC'라는 문자열을 전달해도 이동할 수 있습니다
3857 단어 RailsRubyactiverecordtech
결론
모델의 Primary Key가 정수이면 문자열
Person.find("123ABC")
을 전달할 때to_i
가 숫자로 변환하고 Person.find(123)
로 평가됩니다.Person.find("123ABC")
↓
Person.find(123)
날과 씨
만약에 모델
Person
이 있다고 가정하면 Primary Key는 정수이고 /persons/:id
형식으로 전달된 IDPerson.find(params[:id)
를 사용하여 조회를 버릴 수 있다.방문 로그를 볼 때
/persons/123ABC
처럼 문자열 접근을 넣는 경우가 있습니다.ActiveRecord
find
에서 지정한 ID를 가진 기록ActiveRecord::RecordNotFound
을 찾지 못하면 raise를 사용해야 하지만 일반적으로 접근할 수 있음을 알 수 있습니다.레코드에 대한 데이터 표시 ID = 123
문서를 자세히 읽은 후에 다음과 같은 기록이 있음을 발견하였다.Person.find(1) # returns the object for ID = 1
Person.find("1") # returns the object for ID = 1
Person.find("31-sarah") # returns the object for ID = 31
If the primary key is an integer, find by id coerces its arguments by using to_i.to_i
로 수치로 변환할 수 있는 문자열이라면 다음과 같은 형태로도 이동할 수 있다Person.find(' 10')
Person.find('-10')
Person.find('+10')
Person.find('00010')
Person.find('+00010ABCDE')
↓ 全て以下と同じ結果になる
Person.find(10)
Person.find("1")
처럼 문자열로 지정해도 움직이는 건 알지만, Person.find("31-sarah")
처럼 수치 이외의 문자가 포함돼도 움직일 줄은 몰라서 메모입니다.
Reference
이 문제에 관하여(ActiveRecord의find에서'123ABC'라는 문자열을 전달해도 이동할 수 있습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nhsykym/articles/46c411c8c9a859텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)