在横排搜索中只包括有作用域的记录,而不是所有记录



我有一个Employee应用程序类,每个Employee必须在应用程序中选择一个他可以使用的软件,然后我有一个使用ransack的搜索表单,但是当我按软件搜索员工应用程序时,我只想获得选择了该软件的员工应用程序,而不是返回所有员工应用程序,因为显然它没有使用该范围或ransack查询中的过滤器那么,如何使用作用域或编写正确的查询来只包含选中的记录呢?

class EmployeeSoftware < ApplicationRecord
  belongs_to :employee_application
  scope :selected, -> { where(selected: true) }
end
class EmployeeApplicationsController < ApplicationController
    
    def index
      
        @search = EmployeeApplication.ransack(q)
        @employee_applications = @search.result.to_a.uniq
    
    end
end

视图
= form.select :employee_softwares_id_in, options_from_collection_for_select(employee_software_options_for_select, "id", "name", @search.employee_softwares_id_in)

知道我该怎么做吗?

更新:我设法通过视图添加字段,它将被包含在ransack查询中,不知道是否有更好的方法,但这一个工作

= form.select :employee_softwares_id_in, options_from_collection_for_select(employee_software_options_for_select, "id", "name", @search.employee_softwares_id_in)
= form.hidden_field employee_softwares_selected_eq, value: '1'

你可以在你的控制器动作中添加作用域

class EmployeeApplicationsController < ApplicationController
    def index
        @search = EmployeeApplication.selected.ransack(q)
        @employee_applications = @search.result.to_a.uniq
    end
end

您可以使用default_scope,它将在每次尝试搜索时应用。

class EmployeeSoftware < ApplicationRecord
  belongs_to :employee_application
  default_scope -> { where(selected: true) }
end

我希望这对你有帮助。

最新更新