ruby-on-rails - 강좌 - ruby on rails 데이터베이스




레일즈 모델은 어디에 평등하지 않은지 찾아냅니다. (5)

동일하지 않은 조건에서 데이터베이스의 레코드를 어떻게 찾을 수 있습니까? 나는 이것을 가지고있다. 그러나 그것을하는 공상 가로장이있다?

GroupUser.where('user_id != ?',me)

Rails 3에서, 나는 어떤 애호가도 모른다. 그러나, 만약 당신이 알지 못한다면, 평등하지 않은 조건이 (user_id) NULL 값과 일치하지 않습니다. 원한다면 다음과 같이해야합니다.

GroupUser.where("user_id != ? OR user_id IS NULL", me)

Rails 4

GroupUser.where.not(user_id: me)

당신이 가지고있는 것은 레일즈가 생각하는 3 가지 방법입니다.


당신이 그것을 더 MetaWhere 수있는 유일한 방법은 MetaWhere 입니다.

MetaWhere에는 다음과 같은 코드를 허용하는 Squeel 이라는 새로운 사촌이 있습니다.

GroupUser.where{user_id != me}

이것이 당신이 만드는 유일한 리펙터라면, 보석을 쓸만한 가치가 없다는 것과 나는 단지 당신이 가지고있는 것에 충실 할 것입니다. Squeel은 Ruby 코드와 상호 작용하는 복잡한 쿼리가 많은 상황에서 유용합니다.


연결을 처리 할 때는 항상 SQL 쿼리에 테이블 이름을 포함시켜야합니다.

실제로 다른 테이블에 user_id 열이 있고 두 테이블을 조인하면 SQL 쿼리에 모호한 열 이름이 생깁니다 (예 : 문제).

따라서, 귀하의 예에서 :

GroupUser.where("groups_users.user_id != ?", me)

또는 좀 더 자세한 정보 :

GroupUser.where("#{table_name}.user_id IS NOT ?", me)

해시를 사용하는 경우 레일스가 해시를 처리하므로 해시를 염려 할 필요가 없습니다.

GroupUser.where(user: me)

레일 4에서 @ dr4k3이 말했듯이 쿼리 메소드가 추가 not 않았습니다 :

GroupUser.where.not(user: me)




ruby-on-rails-3