9

動的アクティブ管理スコープに問題があります。アプリ内の「プロジェクト」の「マネージャー」ごとにスコープを作成しようとしています。ただし、スコープは、新しいマネージャーが作成されたとき(またはプロジェクトに割り当てられたとき)には更新されないようですが、サーバーを再起動すると更新されます。したがって、コード自体は「機能」しますが、明らかに私が望む方法ではありません。私はruby/rails noobなので、何らかの方法でスコープを「更新」するために何かをする必要があるかどうかはわかりません。

参考までに、ActiveAdminを使用してHerokuCedarでRails3.2を使用しています

問題のコードは次のとおりです(これは機能しますが、サーバーの再起動後にのみ新しいマネージャーが導入されます)。


Manager.find_each do |m|
  scope m.first_name do |projects|
    projects.where(:manager_id => m.id)
  end
end

そして、Active AdminProjectモデル全体:

ActiveAdmin.register Project do
 menu :priority => 1
 index do
  column :name
  column :company_name
  column :status
  column :projection do |project|
   number_to_currency project.projection
  end
  column :updated_at
  default_actions
 end

 scope :all
 scope :working, :default => true do |projects|
  projects.where(:status => 'working')
 end

 Manager.find_each do |m|
  scope m.first_name do |projects|
    projects.where(:manager_id => m.id)
  end
 end
end
4

6 に答える 6

4

私はこれが私のために働くことがわかりました:

ActiveAdmin ファイル

scope :working, :default => true do |projects|
  Project.working
end

モデル

scope :working, -> { where(:status => 'working') }

返信が少し遅れましたが、誰かの役に立てば幸いです。

于 2012-10-19T08:27:38.630 に答える
2

AA レジスタ ブロック内の真の動的スコープは機能しません。これは、Manager テーブルの変更が「初期化」時に作成された動的スコープに反映されないことを意味します。https://github.com/gregbell/active_admin/wiki/Creating-dynamic-scopesも参照してください。試してみることができるのは、スコープの代わりにフィルターを使用することです。次に、次のように書くことができます。

filter :managers, :as => :select, :collection => proc { Manager.order('name ASC').map(&:first_name) }  

また、マネージャーのプロパティの変更は、サーバーを再起動せずに (ページの更新後に) 表示されます。https://github.com/gregbell/active_admin/issues/1261#issuecomment-5296549も確認し てください

また、アクティブなレコードのスコープが異なることに注意してください! アクティブな管理スコープから。あなたはチェックしたいかもしれません

http://apidock.com/rails/ActiveRecord/NamedScope/ClassMethods/scope

于 2012-06-15T13:25:08.107 に答える
1

Rails は、プロダクション モードで一度だけクラスをロードします。これは、スコープが一度だけ呼び出され、その後キャッシュされることを意味します。これが、再起動後まで新しいスコープが表示されない理由です。あなたの場合、マネージャーの名を編集した場合も同じことが当てはまります。

解決策はラムダまたはProcを使用することかもしれないと思いますが、数分間試してみましたが、うまくいきませんでした。activeadmin の書き方によってもできない場合があります。

于 2012-05-11T03:41:11.403 に答える