ほとんどのクエリをスコープ(company_search_params
)に移動することで、Companies_Controller#indexメソッドをリファクタリングして、ロジックを少なくすることを試みています。モデルスコープの引数エラー
paramをモデルスコープに渡す最も良い方法は何ですか? 引数の数が間違っています(0、予想される1が与えられました)。私はスコープを書くのは比較的新しいので、Railsガイドに当てはまる引数や条件を渡すことについてはあまり見つけられませんでした。
企業コントローラ
def index
params[:name_contains] ||= ''
Company.company_search_params(params[:name_contains])
@search = Company.company_search_params
@companies = @search.page(params[:page])
end
会社のモデルあなたの助けを
scope :company_search_params, ->(name_contains){
where(
<<-SQL
"name LIKE :match OR subdomain LIKE :match", { match: "%#{name_contains}%" }
SQL
).where(is_archived: false).order(name: :asc)
}
感謝。あなたのcompany.rbであなたの問題のために
をnamed_scopeサンプルと情報
scope :named_scope, lambda {
|variable1, variable2|
where...
order...
}
#when you call it from your controller
Model.named_scope("value 1","value 2")
を使用して
は、なぜあなたは 'の両方を持っていますCompany.company_search_params(params [ :name_contains]) 'と' @search = Company.company_search_params'?戻り値に注意を払っているため、最初は何も実行されません。2番目のエラーはエラーの原因です。 –
@muistooshortありがとう、私は冗長性をキャッチせず、それが無効になっていることを認識しました。 – VegaStudios