我目前有一个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