gpt4 book ai didi

ruby-on-rails - 仅当 URL 中存在参数时,Rails will_paginate 使用 :conditions,

转载 作者:太空宇宙 更新时间:2023-11-03 16:33:30 26 4
gpt4 key购买 nike

我正在尝试从数据库中获取分页记录列表,条件在 url 中给出。

例如:如果 url 是这样的:?name=Michael&age=20它应该显示所有年龄为 20 岁的迈克尔等。

但是如果 url 像 &age=20,它应该显示所有 20 岁的人并忽略“name”参数。

我在 1 页上对 2 个列表进行分页,它们都来自同一模型,只是位置不同,所以我在我的 Controller 中定义了 2 个分页:

@boss = Person.paginate(:page => params[:boss_page], :conditions => "position = 1")
@manager = Person.paginate(:page => params[:manager_page], :conditons => "position = 2")

现在如何仅在 URL 中存在参数时才从 URL 添加条件?

我是这样尝试的:

conditions = []
conditions << [ "age = ?", params[:age] ] if params[:age].present?

但是当我在 URL 中传递参数时它给了我错误:

undefined method `%' for ["age = ? ", "1"]:Array

下一个问题是如何将这个数组中的条件与条件“position = 1”合并?

更新:我了解如何使用条件进行分页,但我只是不知道基于 GET 参数指定条件的最佳想法是什么。我总是可以这样做:

if params[:age].present?
@boss = version with age conditons
else if params[:age].present? and params[:name].present?
@boss = version with age and name
else if params[:name].preset?
@boss = version with name only

但我相信在 Rails 中它可以做得更简单。

最佳答案

第一个选项:您可以根据传递的参数手动粘贴条件,构建自定义命名范围,如果传递的参数不为空(来自一个旧项目的示例),它将添加一个 where:

# custom scope in model
# call in controller by Model.email_contains(params[:email])
def self.email_contains(searched_email)
if(searched_email.blank?)
all # scoped
else
where(:email => searched_email)
end
end

第二个选项,只需使用 ransack(或其前身,meta_search):https://github.com/ernie/ransack

关于ruby-on-rails - 仅当 URL 中存在参数时,Rails will_paginate 使用 :conditions,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11718454/

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