来自不同控制器的Ransack搜索模型属性

时间:2018-07-25 22:50:44

标签: ruby-on-rails search ransack

我在这里有一个Rails应用程序,正在向它构建背包。

我已经安装了Devise,但是实际上没有用到用户索引页面,相反,我有一个名为MemberListController的控制器,其中带有目录方法,并且有一个链接到它的目录页面。这是我希望我的管理员用户查看成员资格目录的地方。 (有关控制器,请参见下文)

MemberListController.rb

class MemberListController < ApplicationController
  before_action :authenticate_user!

      def directory
        @users = User.all
        @q = User.ransack(params[:q])
        @user = @q.result(distinct: true)

        respond_to do |format|
          format.html
          format.xlsx
        end

      end

    end

我在目录页面中构建了以下搜索表单:

   <%= search_form_for @q do |f| %>
      <%= f.label :f_name_or_l_name_or_email_or_business_name %>
      <%= f.search_field :f_name_or_l_name_or_email_or_business_name %>
      <%= f.submit %>
    <% end %>

当我从目录页面(我希望在其中显示结果的位置)提交表单时,出现以下错误:

UsersController#index is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: [] NOTE! For XHR/Ajax or API requests, this action would normally respond with 204 No Content: an empty white screen. Since you're loading it in a web browser, we assume that you expected to actually render a template, not nothing, so we're showing an error to be extra-clear. If you expect 204 No Content, carry on. That's what you'll get from an XHR or API request. Give it a shot.

我不确定为什么我会笨拙地使用用户控制器或索引操作,因为一切都通过目录控制器进行管理。

请帮助不确定我在哪里出错了..有没有办法像萨克斯想要的那样将其显示在用户控制器的外面?

1 个答案:

答案 0 :(得分:2)

Ranack足够聪明,可以从Rackack搜索对象中推断出form_url

因此,如果您没有通过任何url选项来进行search_form_for的搜查,它将提交构建了搜查表的实体的for index操作。

因此,您必须将视图逻辑更改为以下代码-

<%= search_form_for @q, url: member_lists_path do |f| %>
  <%= f.label :f_name_or_l_name_or_email_or_business_name %>
  <%= f.search_field :f_name_or_l_name_or_email_or_business_name %>
  <%= f.submit %>
<% end %>

Here,您可以阅读有关洗劫的更多信息。