Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails5:通用网格-如何获取当前搜索的列名_Ruby On Rails - Fatal编程技术网

Ruby on rails rails5:通用网格-如何获取当前搜索的列名

Ruby on rails rails5:通用网格-如何获取当前搜索的列名,ruby-on-rails,Ruby On Rails,我想做一个通用的网格,可以在我的应用程序中使用它来显示来自不同模型的数据。由于我是RoR的新手,请让我知道我的“愿景”是否合适,或者我应该改变我对这个问题的思考方式: 控制器: class Admin::UsersController < ApplicationController before_action :authenticate_user! authorize_resource def index @curr

我想做一个通用的网格,可以在我的应用程序中使用它来显示来自不同模型的数据。由于我是RoR的新手,请让我知道我的“愿景”是否合适,或者我应该改变我对这个问题的思考方式:

控制器:

    class Admin::UsersController < ApplicationController
      before_action :authenticate_user!
      authorize_resource

        def index
            @current_scope = params[:role]
            @users = User.select(:id, :email, :role, :last_sign_in_at).role(@current_scope)
        end

end
索引视图:

<%= render '/layouts/shared/grid', object: @users%>

部分网格:

<% object.column_names.each do |column_name| %>
                <th><%= column_name %></th>
<% end %>

我的问题是,我可以始终显示所有列(这是ActiveRecord::Relation返回的),而不仅仅是查询中所选参数的列。我几乎看不到潜在的解决方案——哪一个是最好的

  • ActiveRecord::Base.connection.exec_query的用法-如果我这样做,我可以使用then.columns方法返回我需要的内容。但是我不确定我是否喜欢它

  • 使用搜索参数代替查询结果进行迭代


  • 还有其他建议吗?

    您可以使用
    方法。它不是很有文档记录,但它返回解析的sql查询

    对于此查询:

    User.select(:id, :email, :role,:last_sign_in_at).role(@current_scope).values
    
    它返回如下内容:

    {:select=>[:id, :email, :role, :last_sign_in_at], :where=>#<ActiveRecord::Relation::WhereClause:0x007fe0d3b29bf0 @predicates=["role = admin"], @binds=[]>}
    

    您可以使用
    方法。它不是很有文档记录,但它返回解析的sql查询

    对于此查询:

    User.select(:id, :email, :role,:last_sign_in_at).role(@current_scope).values
    
    它返回如下内容:

    {:select=>[:id, :email, :role, :last_sign_in_at], :where=>#<ActiveRecord::Relation::WhereClause:0x007fe0d3b29bf0 @predicates=["role = admin"], @binds=[]>}
    

    谢谢!我喜欢你的解决方案——比我的:)更“干净”)不幸的是,我今天没有时间在我的应用程序中这么做——但我保证,我会在我完成后在这里做一个简短的更新:)你建议在这里使用装饰模式。我同意-这是有意义的(我们将动态生成网格控制的代码与用数据填充网格的代码分开)。我以前从未在rails中使用过decorator模式-如果我们想使用decorators,您认为使用draper gem并“默认”包含它有意义吗?Thx!我喜欢你的解决方案——比我的:)更“干净”)不幸的是,我今天没有时间在我的应用程序中这么做——但我保证,我会在我完成后在这里做一个简短的更新:)你建议在这里使用装饰模式。我同意-这是有意义的(我们将动态生成网格控制的代码与用数据填充网格的代码分开)。我以前从未在rails中使用过decorator模式——如果我们想使用decorator,您认为使用draper gem并“默认”包含它有意义吗?