我正在尝试重构Companies_Controller #index方法,通过将大部分查询移动到范围company_search_params
中来包含更少的逻辑。
将参数传递给模型范围的最佳方法是什么?我收到一个错误,错误的参数数量(给定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)
}
感谢您的帮助。
答案 0 :(得分:0)
使用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.rb
scope :company_search_params, lambda {
|name_contains|
where(
<<-SQL
"name LIKE :match OR subdomain LIKE :match", { match: "%#{name_contains}%" }
SQL
).where(is_archived: false).order(name: :asc)
}
company_controller.rb
def index
@search = Company.company_search_params(params[:name_contains])
@companies = @search.page(params[:page])
end