gpt4 book ai didi

ruby-on-rails - Rails 5 复选框过滤器

转载 作者:行者123 更新时间:2023-12-04 08:49:36 25 4
gpt4 key购买 nike

我似乎无法在任何地方找到一个简单的解决方案。简而言之,我只想能够过滤带有复选框的项目,并可以选择多个框和过滤器工作。参数被输入,但结果不出现(见下文)。

如果我从 View 中删除 [],我可以搜索单个项目,但不能搜索多个项目。 [] 编码 %5B%5D进入我认为是搜索不起作用的部分原因的 URL。请任何可以帮助的人。

Controller :

@cars = if params[:colour_category]
Car.where('colour_category LIKE ? OR design LIKE ?', "%#{params[:colour_category]}%", "%#{params[:design_category]}%")
else
Car.all
end

看法:
 <%= form_tag cars_path, method: :get do %>
<%= check_box_tag('colour_category[]', "Yellow") %>
<%= check_box_tag('colour_category[]', "Blue") %>
<%= check_box_tag('design_category[]', "Luxury") %>
<%= submit_tag "Submit" %>
<% end %>

提交后服务器中的参数示例: Parameters: {"utf8"=>"✓", "colour_category"=>["Yellow", "Blue"], "commit"=>"Submit"}

最佳答案

一种更简洁的方法,它基于 params 链接不同的范围/过滤器方法值。我正在发布我的一个应用程序中的示例,您可以采用相同的概念:

module Client::Filterable
extend ActiveSupport::Concern
include PgSearch::Model

included do
scope :find_by_company, -> (company_id) { where(company_id: company_id) }

pg_search_scope :search, against: %w( name ), using: {
tsearch: { prefix: true }
}
end

class_methods do
def filter(params = {})
relation = self
relation = relation.search(params[:query]) if params.fetch(:query, false).present?
relation = relation.find_by_company(params[:company_id]) if params.fetch(:company_id, false).present?
relation.all
end
end
end

然后在您的 Controller 中:

@clients = Client.all.filter(query: 'John Smith', company_id: 4356)

您可以在 #filter 中添加尽可能多的过滤器选项。方法,它们只会在相关参数键存在时应用。

def filter(params = {})
relation = self
relation = relation.by_color_category(params[:color_category]) if param.fetch(:color_category, false).present?
relation = relation.by_design_category(params[:design_category]) if param.fetch(:design_category, false).present?
relation.all
end

关于ruby-on-rails - Rails 5 复选框过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47851081/

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