where와 find_by/find의 차이
6810 단어 루비RailsActiveRecord
선배님이 채팅으로 빨리 설명하고 있을 정도! 라고 생각했으므로 남겨 둡니다
User.where(id: 1)과 User.find_by(id: 1)/User.find(1)의 차이점
둘 다 DB에서 데이터를 가져오고 싶은 처리인 것은 확실하다. 구체적으로 어떻게 다른가?
where 쪽은, 복수 조건을 붙여 찾을 수 있는, 같은 흐릿한 차이 밖에 머리에 들었다.
where를 사용하는 경우
where 절을 사용하면 항상 ActiveRelation이므로 지연 평가가 수행됩니다.
즉, 즉시 SQL문이 발행되어 실행되는 것은 아니다.
돌려주어지는 값의 클래스는, ActiveRecord_Relation
가 된다.
[1] pry(main)> User.where(id: [1])
#=> [#<User id: 1, email: "[email protected]", created_at: "2017-03-30 01:56:31", updated_at: "2017-06-20 04:50:23"]
[7] pry(main)> User.where(id: 1).class
=> User::ActiveRecord_Relation
find_by 또는 find를 사용하는 경우
즉시 SQL을 실행하여 객체 자체를 반환합니다.
돌려주어지는 값의 클래스는, 여기에서는 User
가 된다. 즉시 SQL이 실행되고 있음을 알 수 있습니다.
[1] pry(main)> User.find_by(id: 1)
#=> [#<User id: 1, email: "[email protected]", created_at: "2017-03-30 01:56:31", updated_at: "2017-06-20 04:50:23"]
[2] pry(main)> User.find(1)
#=> [#<User id: 1, email: "[email protected]", salt: nil, created_at: "2017-03-30 01:56:31", updated_at: "2017-06-20 04:50:23"]
[3] pry(main)> User.find_by(id: 1).class
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
=> User(id: integer, email: string, created_at: datetime, updated_at: datetime)
[3] pry(main)> User.find(1).class
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
=> User(id: integer, email: string, created_at: datetime, updated_at: datetime)
참고
이 사람의 설명은 알기 쉽다.
h tps : // s t c ゔ ぇ rf ぉ w. 코m/아/9574674
Reference
이 문제에 관하여(where와 find_by/find의 차이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yukaaaah/items/b3e018953f3c9e381445
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[1] pry(main)> User.where(id: [1])
#=> [#<User id: 1, email: "[email protected]", created_at: "2017-03-30 01:56:31", updated_at: "2017-06-20 04:50:23"]
[7] pry(main)> User.where(id: 1).class
=> User::ActiveRecord_Relation
[1] pry(main)> User.find_by(id: 1)
#=> [#<User id: 1, email: "[email protected]", created_at: "2017-03-30 01:56:31", updated_at: "2017-06-20 04:50:23"]
[2] pry(main)> User.find(1)
#=> [#<User id: 1, email: "[email protected]", salt: nil, created_at: "2017-03-30 01:56:31", updated_at: "2017-06-20 04:50:23"]
[3] pry(main)> User.find_by(id: 1).class
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
=> User(id: integer, email: string, created_at: datetime, updated_at: datetime)
[3] pry(main)> User.find(1).class
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
=> User(id: integer, email: string, created_at: datetime, updated_at: datetime)
이 사람의 설명은 알기 쉽다.
h tps : // s t c ゔ ぇ rf ぉ w. 코m/아/9574674
Reference
이 문제에 관하여(where와 find_by/find의 차이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Yukaaaah/items/b3e018953f3c9e381445텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)