development

같지 않음에 대한 Rails ActiveRecord 쿼리

big-blog 2020. 12. 10. 20:52
반응형

같지 않음에 대한 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