【发布时间】:2017-09-21 19:19:12
【问题描述】:
我正在尝试重构 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)
}
感谢您的帮助。
【问题讨论】:
-
为什么你同时拥有
Company.company_search_params(params[:name_contains])和@search = Company.company_search_params?第一个什么都不做,因为您正在关注返回值,第二个导致您的错误。 -
@muistooshort 谢谢你,我没有发现冗余并意识到它是压倒一切的。
标签: sql ruby-on-rails ruby scope