반응형
같지 않음에 대한 Rails ActiveRecord 쿼리
레일즈 3.2.1
연산자 를 구성하기 위해 ActiveRecord의 해시 구문을 사용 하는 방법이 있습니까 ( squeel 없이 ) !=
?
같은 것 Product.where(id: !params[:id])
생성 SELECT products.* FROM products WHERE id != 5
반대를 찾고 Product.where(id: params[:id])
최신 정보
레일 4에는 not
운영자가 있습니다.
Product.where.not(id: params[:id])
이를 수행하는 기본 제공 방법이 없습니다 (Rails 3.2.13 기준). 그러나 다음과 같은 방법을 쉽게 구축 할 수 있습니다.
ActiveRecord::Base.class_eval do
def self.where_not(opts)
params = []
sql = opts.map{|k, v| params << v; "#{quoted_table_name}.#{quote_column_name k} != ?"}.join(' AND ')
where(sql, *params)
end
end
그런 다음 다음을 수행 할 수 있습니다.
Product.where_not(id: params[:id])
최신 정보
@DanMclain이 대답했듯이-이것은 Rails 4에서 이미 수행되었습니다 (사용 where.not(...)
).
다음을 사용할 수 있습니다.
Product.where('id != ?', params[:id])
쿼리를 매개 변수화하면서 찾고있는 것을 생성합니다.
Rails 4에서는 not 절을 지원하기 위해 다음 구문이 추가되었습니다.
Product.where.not(id: params[:id])
연결을 사용하여 여러 절 추가 ...
Product.where.not(id: params[:id]).where.not(category_id: params[:cat_id])
Rails 4는 이것을 알아 냈습니다. 따라서 레일스 앱을 업데이트하면
Model.where.not(:id => params[:id])
Arel 은 여러분이 탐험하고 싶을 수있는 것입니다. Rails 3+에 포함되어 있습니다.
Arel 을 사용하는 방법
Product.where(Product.arel_table[:id].not_eq(params[:id]))
과
Product.where(Product.arel_table[:id].not_eq(params[:id])).to_sql
아래와 같이 SQL을 생성합니다.
SELECT `products`.* FROM `products` WHERE (`products`.`id` != 1)
이 도움을 바랍니다
참고 URL : https://stackoverflow.com/questions/12184816/rails-activerecord-query-for-not-equal
반응형
'development' 카테고리의 다른 글
예외 있음 : 조각이 이미 활성화 됨 (0) | 2020.12.10 |
---|---|
BigDecimal 곱하기 0 (0) | 2020.12.10 |
Windows에서 Cygwin을 통해 쉘 스크립트 실행 (0) | 2020.12.10 |
Gulp-uglify : 던지기 어; (0) | 2020.12.10 |
여러 줄의 JSON으로 컬 (0) | 2020.12.10 |