私は、別のモデルのデータを表示するために私のアプリで使用することができる汎用グリッドを行うことを望みます。私はRoRのでは初心者ですとして - 私の「ビジョン」がOKであれば、私に知らせて、または私はこの問題について考える方法を変更する必要がありますしてくださいrails5:一般的なグリッド - 現在の検索の列名を取得する方法
コントローラー:
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
ユーザーモデル:
scope :role, -> (role) {where('role = ?', role) if role.present?}
Indexビュー:パーシャル
<%= 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の
使い方 - 私はそうするならば、私はその後、私は必要なものを返す.columnsメソッドを使用することができます。しかし、私が代わりにクエリ結果のsearch_paramsの
使用量が
その他の提案反復するために...私はそれを好きかどうかわからないのですか?
Thx!私はあなたのソリューションが好きです - もっとクリーンな私の:) Unfortunatelly私は今日私のアプリでそれを行う時間がありません - しかし、私はすぐに私はそれを行うにはここで短い更新を行うことを約束:) – MaciekR
あなたはここでデコレータパターンを使用します。私は同意します - それは理にかなっています(動的グリッドコントロールを生成したコードを、グリッドにデータで埋め込んだコードから分割しました)。私は前にレールにデコレータパターンを使用したことはありません - あなたがデコレータを使用したい場合は、ドレープの宝石を使用し、それを「デフォルト」に含めることは理にかなっていると思いますか? – MaciekR
はい、ドラッパーはこれに適しています。それを試してみてください。 –