Ruby on rails rails5:通用网格-如何获取当前搜索的列名
我想做一个通用的网格,可以在我的应用程序中使用它来显示来自不同模型的数据。由于我是RoR的新手,请让我知道我的“愿景”是否合适,或者我应该改变我对这个问题的思考方式: 控制器:Ruby on rails rails5:通用网格-如何获取当前搜索的列名,ruby-on-rails,Ruby On Rails,我想做一个通用的网格,可以在我的应用程序中使用它来显示来自不同模型的数据。由于我是RoR的新手,请让我知道我的“愿景”是否合适,或者我应该改变我对这个问题的思考方式: 控制器: class Admin::UsersController < ApplicationController before_action :authenticate_user! authorize_resource def index @curr
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返回的),而不仅仅是查询中所选参数的列。我几乎看不到潜在的解决方案——哪一个是最好的
还有其他建议吗?您可以使用
值
方法。它不是很有文档记录,但它返回解析的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并“默认”包含它有意义吗?