여러 범위를 함께 연결하는 방법을 알아 내려고하고 있습니다. 내가하려는 일은 사용자 모델에서 by_keyword 범위를 호출하는 컨트롤러에 params [: user_search]를 전달하는 검색 상자를 갖는 것입니다. 내가 지금 가지고있는 by_keyword 범위가 작동하지만 다른 모든 범위를 검색하도록하고 싶습니다. 그러므로 본질적으로 by_keyword 범위는 사용자가 입력 한 키워드에 상관없이 모든 범위를 쿼리해야합니다. 내 사용자 모델에서 내 users_controller 지수 액션Rails - 연결 범위에 인수 전달
if params[:user_search].present?
@users = @users.by_keyword(params[:user_search])
end
에서
내가
scope :by_keyword, -> (keyword) { where('experience LIKE ? OR current_job_title LIKE ?', "%#{keyword}%", "%#{keyword}%").order(updated_at: :desc) if keyword.present? }
내가 by_keyword 범위
# these scopes call child classes of User such as skills, languages, patents, etc...
scope :by_skill, -> (sk) { joins(:skills).distinct.where('skills.name LIKE ?', "%#{sk}%").order(updated_at: :desc) if sk.present? }
scope :by_language, -> (lang) { joins(:languages).distinct.where('languages.language LIKE ?', "%#{lang}%").order(updated_at: :desc) if lang.present? }
scope :by_certification_or_cert_authority, -> (cert) { joins(:certifications).distinct.where('certifications.certification_name LIKE ? OR certifications.certification_authority LIKE ?', "%#{cert}%", "%#{cert}%").order(updated_at: :desc) if cert.present? }
scope :by_education_level, -> (ed) { joins(:qualifications).distinct.where('qualifications.education LIKE ?', "%#{ed}%").order(updated_at: :desc) if ed.present? }
scope :by_university_major, -> (maj) { joins(:qualifications).distinct.where('qualifications.university_major LIKE ?', "%#{maj}%").order(updated_at: :desc) if maj.present? }
이러한 모든 체인 방법을 찾고 싶습니다있다
내가 읽음 http://guides.rubyonrails.org/active_record_querying.html#scopes
그리고이 예제는이 예제이지만, 함께 연결된 2 개 이상의 스코프로이 작업을 수행하는 방법을 잘 모르겠습니다.
class Article < ApplicationRecord
scope :published, -> { where(published: true) }
scope :published_and_commented, -> { published.where("comments_count > 0") }
end
내 모든 스코프는 인수를 받지만, 스코프에 인수를 전달하는 방법은 확실하지 않습니다. – Scott
흠, 두 개의 배열을 만들어 다른 아이디어를 얻었습니다. 첫 번째 배열은 범위의 이름으로 구성되고, 두 번째 배열은 범위의 매개 변수로 구성됩니다. 배열 인덱스 간의 일대일 관계와 같을 것입니다. index each_with_index와 함께 첫 번째 배열을 만들고 [send] (https://ruby-doc.org/core-2.2.0/Object)를 적용합니다.html # method-i-send) 함수를 사용하여 두 번째 배열에있는 매개 변수를 보내고 결과를 일부 변수에 보관합니다. 실제로 범위를 원하는 방식으로 연결할 수 있는지 여부는 알 수 없습니다. 최대한 빨리 솔루션을 찾으십시오. –