Rails在多个实例上搜索过滤器

时间:2017-11-29 07:45:09

标签: ruby-on-rails ransack

我有一个民意调查应用,可以将民意调查创建为草稿或已发布。管理员可以看到所有。用户只发布了一个。 然后我使用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

由于我需要创建两个轮询实例,我在@q旁边添加了@p。而且我不确定这是正确的做法。

在我看来,我有

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

对于ransack过滤器,我有:

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

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

如何让过滤器再次运行?

1 个答案:

答案 0 :(得分:1)

我认为可能是因为您的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)