2011-10-29 52 views
6

我目前有一個Rails 3.0.10應用程序,我用簡單的關聯做了兩個模型:has_many和belongs_to。Rails 3 - ActiveAdmin - 顯示ActiveRecord對象而不是文本

安裝完ActiveAdmin插件並創建相應的Ruby資源文件後,我發現了一些奇怪的行爲。

下面,您可以看到「作業文件」belongs_to「Ernet客戶端」。這些關聯都正常工作,但顯示名稱顯示爲實際的ActiveRecord對象而不是客戶端名稱。

enter image description here

這是展示視圖中的「工作文件」部分時:

enter image description here

但是,如果我去查看實際的客戶端,顯示正確的文本:

enter image description here

在「作業文件」中一定會出現問題這導致了這一點,但我無法弄清楚它可能是什麼。谷歌搜索後,我發現這一點:http://groups.google.com/group/activeadmin/browse_thread/thread/2a261e070efa7bae

內JobFile.register文件I指定與此顯示名稱:

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尋找其中之一。

相關問題