gpt4 book ai didi

ruby - 如何重构构建事件记录搜索哈希的 Controller 操作

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:59 24 4
gpt4 key购买 nike

这段代码感觉不对。我试图让我的 Controller 变瘦,但我觉得 Controller 操作中的逻辑太多了。

组织此代码的更好方法是什么?

def search
where_obj = {:status => 1}

if params[:city].present?
where_obj.merge! :city => params[:city]
end

if params[:county].present?
where_obj.merge! :county => params[:county]
end

## THERE WILL BE MANY MORE IF STATEMENTS HERE DUE TO GROWING SEARCH FORM

@person = Person.where(where_obj)
end

随着搜索表单的增长,这个 Controller Action 也会增长。我怎样才能让我的 Controller 保持 slim ?

最佳答案

怎么样:

def search
query = { :status => 1 }.merge(params.select { |k,_| [:city, :country].include?(k) })
@person = Person.where(query)
end

或者使用 slice 的更简单的版本ActiveSupport 提供的方法(在 Rails 中):

def search
query = { :status => 1 }.merge(params.slice(:city, :country))
@person = Person.where(query)
end

如果您要有选择地包含一堆不同的参数,那么您可以像这样对它们进行分组:

def search
search_params = [:city, :country, :continent, ...]
query = { :status => 1 }.merge(params.slice(*search_params))
@person = Person.where(query)
end

(感谢@ajcodez 指出在传递给 slice 时需要对 search_params 进行拼接。)

关于ruby - 如何重构构建事件记录搜索哈希的 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13734536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com