我目前有一個Rails 3.0.10應用程序,我用簡單的關聯做了兩個模型:has_many和belongs_to。Rails 3 - ActiveAdmin - 顯示ActiveRecord對象而不是文本
安裝完ActiveAdmin插件並創建相應的Ruby資源文件後,我發現了一些奇怪的行爲。
下面,您可以看到「作業文件」belongs_to「Ernet客戶端」。這些關聯都正常工作,但顯示名稱顯示爲實際的ActiveRecord對象而不是客戶端名稱。
這是展示視圖中的「工作文件」部分時:
但是,如果我去查看實際的客戶端,顯示正確的文本:
在「作業文件」中一定會出現問題這導致了這一點,但我無法弄清楚它可能是什麼。谷歌搜索後,我發現這一點: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
一切似乎是工作,因爲它應該。
任何人都有任何見解如何解決這個問題?
好吧,我按照你的建議在ErnetClient.rb模型中定義了一個to_s方法。它最終導致active_admin/resource/index.html.arb文件中出現錯誤:未定義的局部變量或方法'display_name'爲#。不過,我也將符號「:display_name」放入方法中。這導致過濾器下拉列表爲所有下拉選項逐字呈現「:display_name」。 –
PhillipKregg
那麼,你沒有'display_name'方法。 'to_s'方法應該返回你想爲你的'ErnetClient'對象顯示的任何字符串。 –
從我所看到的,display_name是一個已經存在於viewhelpers下的ActiveAdmin插件中的方法:https://github.com/gregbell/active_admin/blob/master/lib/active_admin/view_helpers/display_helper.rb。有沒有什麼能夠阻止我的應用程序看到它? – PhillipKregg