0
작동하는 것처럼 보이는 코드 조각이 있습니다. 나는 단지 원하는 일을 성취 할 훨씬 더 좋은 방법이있을 것이라고 생각한다. 문제는 알 수없는 매개 변수 목록을 사용하여 ActiveRecord 쿼리를 작성하는 것입니다.ActiveRecord 동적 쿼리 조건 빌드
query_string = String.new
query_values = []
unless params[:organization][:name].blank?
query_string << 'name = ?'
query_values << params[:organization][:name]
end
unless params[:organization][:national_id].blank? && params[:organization][:vat_id].blank?
raise RequestParamsException.new('National ID or Vat ID given without country') if params[:organization][:country].nil?
country_id = Country.find_by_name(params[:organization][:country]).pluck(:id)
unless params[:organization][:national_id].blank?
query_string << ' OR ' unless query_string.empty?
query_string << '(national_id = ?'
query_values << params[:organization][:national_id]
query_string << ' AND ' << 'country_id = ?)'
query_values << country_id
end
unless params[:organization][:vat_id].blank?
query_string << ' OR ' unless query_string.empty?
query_string << '(vat_id = ?'
query_values << params[:organization][:vat_id]
query_string << ' AND ' << 'country_id = ?)'
query_values << country_id
end
end
known_organizations = query_string.blank? ? [] : Organization.where(query_string, query_values).uniq
나라가 통 또는 주민등록번호가이가 모델 범위 때문에 주어진 때 필요하다 :
class Organization < ActiveRecord::Base
#======================VALIDATIONS=========================
validates :national_id, :uniqueness => { :scope => :country_id }, :allow_blank => true
validates :vat_id, :uniqueness => { :scope => :country_id }, :allow_blank => true
validates :country, :presence => true
end
그건 어디서나 querys에 대해 잘 작동하지만 OR 연산자와 AND 연산자의 경우 OR 연산자를 추가해야하므로 더 많은 작업이 필요합니다. – muichkine