2011-10-29 10 views
6

私は現在Rails 3.0.10アプリを持っており、has_manyとbelongs_toという単純な関連付けを持つ2つのモデルを作った。Rails 3 - ActiveAdmin - テキストの代わりにActiveRecordオブジェクトを表示

ActiveAdminプラグインをインストールし、対応するRubyリソースファイルを作成した後、私はいくつかの奇妙な動作に気付きました。

以下、「ジョブファイル」が「Ernetクライアント」に属していることがわかります。アソシエーションはすべて正しく動作していますが、表示名はクライアント名ではなく実際のActiveRecordオブジェクトとして表示されます。

enter image description here

"ジョブファイル" セクションの下には、show図である:

enter image description here

しかし、私は実際のクライアントを表示するために行く場合は、正しいテキストが表示されます。

"ジョブファイル"に何か問題があります。これを引き起こしているrceしかし、私はそれが何ができるか把握することはできません。私はこれで表示名を指定しJobFile.registerファイル内http://groups.google.com/group/activeadmin/browse_thread/thread/2a261e070efa7bae

filter :ernet_client, :display_name_methods => :display_name 

これは、しかし、動作しませんでした、と私は他の利用可能な名称のすべてを循環グーグル後、私はこれを見つけました無駄に。

ActiveAdminの依存関係を調べて、Sass-Railsが唯一のように見えますが、これは3.1を使用していて、Rails 3.0.10を使用している場合です。

そして最後に、私の団体が実際に働いていたことを確認するために、私はRailsのコンソールを開いて、ジョブファイルを作成:

job = JobFile.new 
=> #<JobFile hash returned> 
job.ernet_client_id = 2 
=> 2 
job.ernet_client.client_name 
=> Target 

すべてはそれが必要として動作しているようです。

誰もがこれを解決する方法についての洞察力を持っていますか?

答えて

10

ErnetClientモデルでto_sメソッドを定義しようとしましたか?それはこのようになります

def to_s 
    display_name 
end 

は、あなたが同様の結果になるだろうコンソールでこれらのオブジェクトのいずれかにto_sを呼んでいたかのように、自動的に呼び出されるメソッドです。

+0

私が提案したように、ErnetClient.rbモデルでto_sメソッドを定義しました。それは、active_admin/resource/index.html.arbファイルで、未定義のローカル変数または#のメソッド 'display_name 'のエラーを引き起こします。しかし、私はシンボル ":display_name"もメソッドに入れます。これにより、フィルタのドロップダウンでは、すべてのドロップダウン選択肢に対して ":display_name"が文字通りレンダリングされました。 – PhillipKregg

+0

さて、あなたは 'display_name'メソッドを持っていません。 'to_s'メソッドは、あなたの' ErnetClient'オブジェクトに対して表示したい文字列を返します。 –

+0

私が見ているところでは、display_nameはviewhelpersのActiveAdminプラグインに既に存在するメソッドです:https://github.com/gregbell/active_admin/blob/master/lib/active_admin/view_helpers/display_helper.rb。私のアプリがそれを見るのを妨げている何かがありますか? – PhillipKregg

3

Filter select show object instead of object nameの説明があります。

# Active Admin makes educated guesses when displaying objects, 
this is the list of methods it tries calling in order 
     setting :display_name_methods, [ :display_name, 
              :full_name, 
              :name, 
              :username, 
              :login, 
              :title, 
              :email, 
              :to_s ] 

あなたは...(上記のリストを参照)モデル内のメソッドをdisplay_namefull_nameを定義する、または...ことがあります。 ActiveAdminはそれらの1つを探します。

関連する問題