6

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

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

下面,您可以看到“作业文件”属于“Ernet 客户端”。关联都正常工作,但是,显示名称显示为实际的 ActiveRecord 对象而不是客户端名称。

在此处输入图像描述

这是“作业文件”部分下的显示视图:

在此处输入图像描述

但是,如果我去查看实际的客户端,则会出现正确的文本:

在此处输入图像描述

导致此问题的“作业文件”资源中一定有问题,但我无法弄清楚它可能是什么。谷歌搜索后,我发现了这个: 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

一切似乎都在正常工作。

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

4

2 回答 2

10

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

def to_s
  display_name
end

看起来这是自动调用的方法,就好像您确实to_s在控制台中调用了这些对象之一一样,您会得到类似的结果。

于 2011-10-29T22:35:13.007 回答
5

您可以在此处找到说明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 寻找其中之一。

于 2014-02-17T19:50:42.410 回答