Html 如何将索引中的Ransack参数[:q]传递给同一控制器的更新操作,以维护过滤结果?
我有一个搜索表单来过滤索引页中的发票 我必须批量编辑该搜索表单筛选的所有实例,但由于我没有将筛选器Html 如何将索引中的Ransack参数[:q]传递给同一控制器的更新操作,以维护过滤结果?,html,ruby-on-rails,filter,controller,ransack,Html,Ruby On Rails,Filter,Controller,Ransack,我有一个搜索表单来过滤索引页中的发票 我必须批量编辑该搜索表单筛选的所有实例,但由于我没有将筛选器参数[:q]发送到更新到期日操作,所有帐户。正在编辑发票,而不仅仅是我在索引中筛选的发票 控制器索引和更新到期日操作 表格: 如何在更新操作中传递筛选参数以维护筛选记录?您可以尝试作为路由参数传递路径:“/action?q=“应该可以。如果您使用的是form\u,请尝试以下@hirenbalani我正在使用rails辅助方法(\u path)进行路由。我仍然可以按您建议的方式传递params[:q]
参数[:q]
发送到更新到期日
操作,所有帐户。正在编辑发票,而不仅仅是我在索引中筛选的发票
控制器索引和更新到期日操作
表格:
如何在更新操作中传递筛选参数以维护筛选记录?您可以尝试作为路由参数传递<代码>路径:“/action?q=“
应该可以。如果您使用的是form\u,请尝试以下
@hirenbalani我正在使用rails辅助方法(\u path)进行路由。我仍然可以按您建议的方式传递params[:q]吗?是的,您可以,尝试以下方式\u path(q:{your json})
这个建议解决了问题吗?@hirenbalani我更接近解决它了!我现在看到“无法将未经许可的参数转换为哈希”,但我已经看到正确的参数[:q]被传递到控制器。我想我必须允许params[:q]?类似于def invoice_params.permit(:q)end的东西
def index
@search = current_account.invoices.ransack(params[:q])
@invoices = @search.result.paginate(page: params[:page])
end
def update_due_date
@search = current_account.invoices.ransack(params[:q])
@invoices = @search.result
failed_counter = 0
@invoices.each do |invoice|
unless invoice.update(due_date: params[:due_date][:due_date])
failed_counter += 1
end
end
if failed_counter.positive?
flash[:danger] = "There was a problem editing the invoices"
else
flash[:success] = "Invoices updated correctly"
end
redirect_to admin_invoices_batch_edit_index_path
end
<div>
<%= search_form_for @search, { url: admin_invoices_batch_edit_index_path, method: :get, html: {class: "form-inline"} } do |f| %>
<div class="form-group">
<%= f.select :status_eq, ["scheduled", "unpaid"], { include_blank: "Estado del recibo..."}, class: "form-control gray" %>
</div>
<div class="form-group">
<%= f.search_field :due_date_gteq, as: :string, placeholder: "Fecha de inicio para filtro",
data:{
controller: "flatpickr",
attributes:{ enableTime: false, enableSeconds: false }
}, class: "my-1 form-control"
%>
</div>
<div class="form-group">
<%= f.search_field :due_date_lteq, as: :string, placeholder: "Fecha de fin para filtro",
data:{
controller: "flatpickr",
attributes:{ enableTime: false, enableSeconds: false }
}, class: "my-1 form-control"
%>
<%= f.submit "Filter", class: "btn btn-primary" %>
<%= link_to "Remove filters", admin_invoices_batch_edit_index_path, class: 'btn btn-primary' if any_filter %>
<% end %>
</div>
<% if params.dig(:q, :status_eq) == "scheduled" %>
<div class="col-md-3 m-1 p-0-important">
<%= simple_form_for :due_date, { url: admin_invoices_batch_edit_due_date_path } do |f| %>
<%= f.input :due_date, as: :string, placeholder: "Nueva fecha de recibo",
input_html: { data:{
controller: "flatpickr",
attributes:{ enableTime: false, enableSeconds: false } } } %>
<!-- passing params[:q] to edit_due_date_path ? -->
<%= hidden_field_tag :q, params[:q] %>
<%= f.button :submit, "Update invoices"%>
<% end %>
</div>
<% end %>
</div>
"q"=>"{\"status_eq\"=>\"scheduled\", \"due_date_gteq\"=>\"\", \"due_date_lteq\"=>\"\"}"