Rails 如何在 Rails 的 Ransack 搜寻功能加上筛选器?

ktr · 2022年04月19日 · 最后由 PaulChan1995 回复于 2022年04月25日 · 249 次阅读

我已经实现 Ransack 的搜寻功能,现在我需要加上筛选器,让列表依据下拉选单筛选的「状态」--也就是下方程式码的 prompt: t('all_status'),显示只符合该状态的 records。

我曾经依照 Ransack 的「extensive documentation」的说明(其中的 Sorting in the View 章节)试作,但结果不断引发 Syntax error,最后只剩下没有功能的「Filter」按钮。我不想放弃 Ransack 的搜寻功能,请告诉我如何加上 filter。

这是 View 的程序代码

<%= search_form_for(@query, class: 'form' , url: list_tasks_path) do |f| %>
  <%= f.label :name, t('search') %>
  <%= f.search_field :name_or_note_cont, placeholder: t('task_name_note') %>
  <%= f.select :status_eq, Task.statuses.map { |key, value| [t("checkpoint_status.#{key}"), value] }, prompt: t('all_status') %> 
  <%= f.submit %>
<% end %>

这是相关的 controller#action

def list
  @query = current_user.tasks.ransack(params[:q])
  @tasks = @query.result.page(params[:page]).per(10)
end

可以贴一下具体错误看看吗

Task.ransack(status_eq: value).result.to_sql

看看返回的 sql 对不对

需要 登录 后方可回复, 如果你还没有账号请 注册新账号