Rails 对多个实例进行搜查过滤器

Rails ransack filter on multiple instances

我有一个投票应用程序,允许创建草稿或已发布的投票。管理员可以看到所有。用户只有发布的。 然后我正在使用 ransack 进行过滤。

这是我的控制器:

    @q = Poll.includes(:division).includes(:vote_options).ransack(params[:q])
    @p = Poll.where(published: '1').includes(:division).includes(:vote_options).ransack(params[:p])
    @polls = @q.result.order(:sort)
    @published_polls = @p.result.order(:sort)
    @display_polls = current_user.admin_role? ? @polls : @published_polls

因为我需要创建两个 Poll 实例,所以我在 @q 旁边添加了 @p。而且我不确定这是正确的方法。

在我看来我有

<% @display_polls.each_with_sortable_id do |poll, sortable_id| %>

对于搜查过滤器,我有:

<%= search_form_for @q, url: polls_path do |f| %>

已发布和未发布的项目按预期正确显示。但是搜查过滤器不起作用。

如何让过滤器重新工作?

我想这可能是因为您的 search_form_for 只在@q 上搜索。我认为这可能是您控制器中更好的方法:

if current_user.admin_role?
    @q = Poll.includes(:division, :vote_options).ransack(params[:q])
else
    @q = Poll.where(published: '1').includes(:division, :vote_options).ransack(params[:q])
end

@polls = @q.result.order(:sort)