gpt4 book ai didi

ruby-on-rails - 在 Rails 2.3 中构建多个条件的更好方法

转载 作者:行者123 更新时间:2023-12-04 06:31:55 25 4
gpt4 key购买 nike

我正在使用 Rails 2.3.8 进行开发,并正在寻找一种更好的方法来构建查找条件。

在搜索页面上,像用户搜索一样,用户设置搜索条件,查找条件取决于用户选择的条件,例如年龄,国家,邮政编码。

我在下面编写了代码来设置多个查找条件。

# Add condition if params post.
conditions_array = []
conditions_array << ['age > ?', params[:age_over]] if params[:age_over].present?
conditions_array << ['country = ?', params[:country]] if params[:country].present?
conditions_array << ['zip_code = ?', params[:zip_code]] if params[:zip_code].present?

# Build condition
i = 0
conditions = Array.new
columns = ''
conditions_array.each do |key, val|
key = " AND #{key}" if i > 0
columns += key
item_master_conditions[i] = val
i += 1
end
conditions.unshift(columns)
# condiitons => ['age > ? AND country = ? AND zip_code = ?', params[:age], params[country], prams[:zip_code]]

@users = User.find(:all,
:conditions => conditions
)

这段代码工作正常,但它很丑而且不聪明。有没有更好的方法来构建查找条件?

最佳答案

命名范围可以使其更具可读性,尽管体积更大,同时仍能防止 SQL 注入(inject)。

named_scope :age_over, lambda { |age|
if !age.blank?
{ :conditions => ['age > ?', age] }
else
{}
end
}

named_scope :country, lambda { |country|
if !country.blank?
{ :conditions => ['country = ?', age] }
else
{}
end
}

named_scope :zip_code, lambda { |zip_code|
if !zip_code.blank?
{ :conditions => ['zip_code = ?', age] }
else
{}
end
}

然后当您进行搜索时,您可以简单地将它们链接在一起:

@user = User.age_over(params[:age_over]).country(params[:country]).zip_code(params[:zip_code])

关于ruby-on-rails - 在 Rails 2.3 中构建多个条件的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11878133/

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