Ransack 搜索包括参数
Ransack search include parameter
我正在使用 gem 'ransack' 来搜索记录。
我正在编写的页面仅以 select @department
的下拉菜单开头。
之后,我希望 Ransack 在 @department
.
内搜索
我需要在 Ransack 搜索参数中包含一个附加参数 department=2
。 (如果我将其插入浏览器,它会起作用 URL)。
浏览器 URL 输入 department=2
http://localhost:5000/departments/costfuture?department=2&utf8=%E2%9C%93&q%5Bid_eq%5D=&q%5Bproject_year_eq%5D=&q%5Boriginal_year_eq%5D=&q%5Bclient_id_eq%5D=43&q%5Blocation_name_cont%5D=&q%5Bproject_name_cont%5D=&q%5Bcoststatus_id_in%5D%5B%5D=&q%5Bcoststatus_id_not_in%5D%5B%5D=&q%5Brebudget_true%5D=0&q%5Bnew_true%5D=0&q%5Bconstruction_true%5D=0&q%5Bmaintenance_true%5D=0&commit=Search
这是控制器:
def costfuture
@departments = current_user.contact.departments
if params[:department]
@department = Department.find(params[:department])
@search = @department.costprojects.future.search(params[:q])
@costprojects = @search.result.order(:department_priority)
end
respond_to do |format|
format.html # index.html.erb
format.json { render json: @departments }
end
end
我在视图中试过这个:
<%= search_form_for @search, url: departments_costfuture_path(:department => @department.id) do |f| %>
但是,生成的 URL 缺少 department=2
。
如果您想将 department
选项传递给 Ransack,您可以使用 search_form_for
中的隐藏字段来实现:
<%= search_form_for @search, url: departments_costfuture_path do |f| %>
<%= f.hidden_field :department_eq, value: @department.id %>
<%# Other form code here %>
<% end %>
但是如果你想搜索一个特定的部门,那么最好使用 Rails 路由。你可以通过修改config/routes.rb
生成URLs like /departments/2/costfuture
:
resources :departments do
get 'costfutures', on: :member
end
现在您可以使用生成的 URL 帮助程序生成将设置 params[:id]
的链接,并且您可以使用它来检索 @department
。
我最终在 search_form_for
中使用了 hidden_field_tag
。
<%= search_form_for @search, url: departments_costfuture_path do |f| %>
<%= hidden_field_tag :department, @department.id %>
<%= f.search_field :last_name_or_first_name_cont %>
<% end %>
然后 params[:department]
和 params[:search]
将可以在控制器中访问。
我正在使用 gem 'ransack' 来搜索记录。
我正在编写的页面仅以 select @department
的下拉菜单开头。
之后,我希望 Ransack 在 @department
.
我需要在 Ransack 搜索参数中包含一个附加参数 department=2
。 (如果我将其插入浏览器,它会起作用 URL)。
浏览器 URL 输入 department=2
http://localhost:5000/departments/costfuture?department=2&utf8=%E2%9C%93&q%5Bid_eq%5D=&q%5Bproject_year_eq%5D=&q%5Boriginal_year_eq%5D=&q%5Bclient_id_eq%5D=43&q%5Blocation_name_cont%5D=&q%5Bproject_name_cont%5D=&q%5Bcoststatus_id_in%5D%5B%5D=&q%5Bcoststatus_id_not_in%5D%5B%5D=&q%5Brebudget_true%5D=0&q%5Bnew_true%5D=0&q%5Bconstruction_true%5D=0&q%5Bmaintenance_true%5D=0&commit=Search
这是控制器:
def costfuture
@departments = current_user.contact.departments
if params[:department]
@department = Department.find(params[:department])
@search = @department.costprojects.future.search(params[:q])
@costprojects = @search.result.order(:department_priority)
end
respond_to do |format|
format.html # index.html.erb
format.json { render json: @departments }
end
end
我在视图中试过这个:
<%= search_form_for @search, url: departments_costfuture_path(:department => @department.id) do |f| %>
但是,生成的 URL 缺少 department=2
。
如果您想将 department
选项传递给 Ransack,您可以使用 search_form_for
中的隐藏字段来实现:
<%= search_form_for @search, url: departments_costfuture_path do |f| %>
<%= f.hidden_field :department_eq, value: @department.id %>
<%# Other form code here %>
<% end %>
但是如果你想搜索一个特定的部门,那么最好使用 Rails 路由。你可以通过修改config/routes.rb
生成URLs like /departments/2/costfuture
:
resources :departments do
get 'costfutures', on: :member
end
现在您可以使用生成的 URL 帮助程序生成将设置 params[:id]
的链接,并且您可以使用它来检索 @department
。
我最终在 search_form_for
中使用了 hidden_field_tag
。
<%= search_form_for @search, url: departments_costfuture_path do |f| %>
<%= hidden_field_tag :department, @department.id %>
<%= f.search_field :last_name_or_first_name_cont %>
<% end %>
然后 params[:department]
和 params[:search]
将可以在控制器中访问。