私は以下の検索クラスメソッドを用意しています。このメソッドは、多数のパラメータを取り、要求を作成します。クラスの継承でNilを処理するRails
def self.search(agent, params)
RealPropertySale.where(id: available_ids)
.joins(:address)
.by_state(state)
.by_suburb(suburb)
.by_post_code(post_code)
.by_country(country)
.paginate(page: page)
end
def self.by_state(state)
where(addresses: {state: state})
end
def self.by_suburb(suburb)
where(addresses: {suburb: suburb})
end
def self.by_post_code(post_code)
where(addresses: {post_code: post_code})
end
def self.by_country(country)
where(addresses: {country: country})
end
私のカスタムクラスのメソッドの1つ、たとえば、 self.by_country(country)
はnilを返し、どのようなparam/sが存在してもクエリが継続するようにします。 paramsが空白だが、クエリが失われてクラスが返されてエラーが発生した場合、自己復帰を試みた。
'self.by_country(country)'は 'nil'を返すべきではありません。これは、空のセットを持つ 'ActiveRecord :: Relation'のインスタンスを返さなければなりません。 – Uzbekjon
適切な基準を持つクエリのみを連結してください。 'country'が指定されていない場合、' by_country(country) 'を連想させると、行のないSQL文が生成され、それ以外の場合は有効な条件でクエリが失敗します。 'self.search'で呼び出すチェーンメソッドを選択して、正しく動作させることができます。 –