ActiveRecord의find에서'123ABC'라는 문자열을 전달해도 이동할 수 있습니다

결론


모델의 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 처럼 문자열 접근을 넣는 경우가 있습니다.
ActiveRecordfind에서 지정한 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.
https://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find 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")처럼 수치 이외의 문자가 포함돼도 움직일 줄은 몰라서 메모입니다.

좋은 웹페이지 즐겨찾기