레일스 모델이 같지 않은 곳을 찾습니다
동일하지 않은 조건에서 데이터베이스의 레코드를 어떻게 찾을 수 있습니까? 나는 지금 이것을 가지고 있지만, 그것을하는 멋진 레일 말하기 방법이 있습니까?
GroupUser.where('user_id != ?',me)
Rails 4.x에서 ( http://edgeguides.rubyonrails.org/active_record_querying.html#not-conditions 참조 )
GroupUser.where.not(user_id: me)
Rails 3.x에서
GroupUser.where(GroupUser.arel_table[:user_id].not_eq(me))
길이를 줄이려면 GroupUser.arel_table
변수에 저장 하거나 모델 GroupUser
자체를 사용하는 경우 ( 예 : a scope
) arel_table[:user_id]
대신GroupUser.arel_table[:user_id]
@jbearden의 답변에 Rails 4.0 구문 크레딧
레일 4
GroupUser.where.not(user_id: me)
더 멋진 방법은 MetaWhere 입니다.
MetaWhere에는 다음 과 같은 코드를 허용하는 Squeel 이라는 새로운 사촌 이 있습니다.
GroupUser.where{user_id != me}
이것이 유일한 리 팩터라면 보석을 사용할 가치가 없으며 나는 당신이 얻은 것을 고수 할 것입니다. Squeel은 Ruby 코드와 상호 작용하는 많은 복잡한 쿼리가있는 상황에서 유용합니다.
레일 4 :
당신이 사용하려는 경우 모두 동일과 동일하지, 당신은 사용할 수 있습니다 :
user_id = 4
group_id = 27
GroupUser.where(group_id: group_id).where.not(user_id: user_id)
(. 즉, 당신이 다양한 연산자를 사용하려면 >
, <
) 어떤 시점에서 다음과 표기법을 전환 할 수 있습니다 :
GroupUser.where("group_id > ? AND user_id != ?", group_id, user_id)
당신은해야한다 항상 협회를 처리 할 때 SQL 쿼리의 테이블 이름이 포함됩니다.
실제로 다른 테이블에 user_id
열이 있고 두 테이블을 조인하는 경우 SQL 쿼리에 모호한 열 이름이 있습니다 (예 : 문제).
따라서 귀하의 예에서 :
GroupUser.where("groups_users.user_id != ?", me)
또는 좀 더 장황한 :
GroupUser.where("#{table_name}.user_id IS NOT ?", me)
해시를 사용하는 경우 Rails가 해시를 처리하므로 걱정할 필요가 없습니다.
GroupUser.where(user: me)
Rails 4에서 @ dr4k3에 따르면 쿼리 방법 not
이 추가되었습니다.
GroupUser.where.not(user: me)
Rails 3에서는 더 멋진 것이 없습니다. 그러나 당신이 알고 있는지, 확실하지 않은 조건이 (user_id) NULL 값과 일치하지 않습니다. 원하는 경우 다음과 같은 작업을 수행해야합니다.
GroupUser.where("user_id != ? OR user_id IS NULL", me)
참고 URL : https://stackoverflow.com/questions/5426421/rails-model-find-where-not-equal
'Programing' 카테고리의 다른 글
AttributeError : 'datetime'모듈에 'strptime'속성이 없습니다. (0) | 2020.07.04 |
---|---|
함수에 대한 C ++ 11의 "최종"키워드의 목적은 무엇입니까? (0) | 2020.07.04 |
람다가있는 foreach, array_map 및 정적 함수가있는 array_map의 성능 (0) | 2020.07.04 |
이클립스 : 모든 프로젝트가 프로젝트 탐색기에서 사라졌습니다. (0) | 2020.07.04 |
SQL Server에서 열에서 후행 공백 제거 및 업데이트 (0) | 2020.07.04 |