【问题标题】:chaining param scopes from seperate forms从单独的表单中链接参数范围
【发布时间】:2016-09-03 16:14:25
【问题描述】:

我可以创建一个高级搜索表单,用户可以在同一表单中过滤by photos_countcountryname

但是,如果我想设置我的应用程序,以便用户可以首先按_photos_count 过滤,然后再按国家/地区名称过滤(两个单独的表单,通过 get 请求将参数传递给查询字符串)?

用户控制器

def index
   @users = User.all.paginate(page: params[:page])
   @users = User.countryname(params[:country]).paginate(page: params[:page]) if params[:country].present?
   @users = User.by_photos_count.paginate(page: params[:page]) if params[:photos_count].present?
end

目前,表单不会确认查询字符串中是否已传递参数。

编辑:这就是我希望表单的工作方式:

example.com/users

用户选择一个国家:

<%= form_tag users_path, method: :get, class: 'country' do %>

example.com/users?country='US'

然后用户按 photos_count 排序

example.com/users?country='US'&photos_count=true

我的问题是我的参数当前没有被链接。它从 example.com/users?country='US' 到 example.com/users?photos_count=true

【问题讨论】:

  • 所以让我看看我是否理解:您希望一对单独的 http get 请求传入查询过滤器信息以在同一查询中运行?我的意思是,你想为过滤器的一部分发送一个请求并为另一部分发送另一个请求,然后执行查询并返回结果?
  • 请看编辑

标签: ruby-on-rails


【解决方案1】:

如果您有相当少量的可能参数,您可以将表单中的现有参数作为隐藏字段传递。

<%= form_tag users_path, method: :get, class: 'country' do %>
    <%= hidden_field_tag :photos_count, params[:photos_count] if params[:photos_count].present? %>
...

【讨论】:

  • 因此,如果有多个可能的参数,我们是否应该创建一个使用 ajax 更新的高级表单,以便在添加新参数时不断过滤结果......就像您在零售网站上看到的那样?
  • 这是一种方法。但是,在这种情况下,您可能只是尝试将所有过滤器选项合并到一种形式中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
相关资源
最近更新 更多