我有一个民意调查应用,可以将民意调查创建为草稿或已发布。管理员可以看到所有。用户只发布了一个。 然后我使用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过滤器不起作用。
如何让过滤器再次运行?
答案 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)