Rails 3 - ActiveAdmin - 显示ActiveRecord对象而不是文本

时间:2011-10-29 21:53:56

标签: ruby-on-rails ruby-on-rails-3 activeadmin

我目前有一个Rails 3.0.10应用程序,我创建了两个简单关联的模型:has_many和belongs_to。

安装ActiveAdmin插件并创建相应的Ruby资源文件后,我注意到了一些奇怪的行为。

下面,您可以看到“作业文件”属于“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文件中,我使用以下命令指定了显示名称:

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

一切似乎都在起作用。

任何人都对如何解决这个问题有任何见解?

2 个答案:

答案 0 :(得分:10)

您是否尝试在to_s模型上定义ErnetClient方法?

def to_s
  display_name
end

看起来这是自动调用的方法,就像你在控制台中的其中一个对象上调用to_s一样,你会得到类似的结果。

答案 1 :(得分: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会查找其中一个。