ActiveAdmin belongs_to / has_one关系打破了其中一个模型的显示页面

时间:2016-02-11 23:53:19

标签: ruby-on-rails ruby ruby-on-rails-4 associations activeadmin

我有两个模型,一个是Project模型,另一个是ProjectSyndication模型,代码看起来像这样:

class Project
  has_one :project_syndication
end


class ProjectSyndication
  belongs_to :project
end


ActiveAdmin.register Project, as: 'Offering' do

end

ActiveAdmin.register ProjectSyndication do
  belongs_to :offering, parent_class: Project
end

当我转到ProjectSyndication的显示页面时,此代码给出了一个错误,如下所示:

undefined method `project_syndications' for #<Project:0x007fc309a972b0>  

我只是进行了一些挖掘,因为它在我的Project模型中创建了一个空的project_syndications方法然后得到了以下错误:

undefined method `find' for nil:NilClass

因此,我可以推断出ActiveAdmin正在将此关联视为has_many关联,并在找到一个项目的所有项目联合后尝试查找ProjectSyndication,这将无效。

我通过在Project model

下创建以下方法解决了这个问题
def project_syndications
  ProjectSyndication.where(project_id: id)
end

这很好用,但我觉得这不是正确的方法。我查看了ActiveAdmin文档,但未找到太多内容。我问的是解决问题的正确方法,或者这是ActiveAdmin的错误/功能。

任何帮助将不胜感激,谢谢你。

1 个答案:

答案 0 :(得分:0)

你的问题很模糊。 也许也提供数据库迁移。

我会检查以下内容(模糊的猜测):

class Project; has_one :project_syndication; end

=&GT;这会使您的数据库具有字段projects.project_syndication_id

=&GT;也许尝试“has_many”那里?

ActiveAdmin.register Project, as: 'Offering' do; end;

=&GT;案例发售与以下提供

=&GT;冗余代码? (删除它)

ActiveAdmin.register ProjectSyndication do; belongs_to :offering, parent_class: Project; end

=&GT;冗余代码? (删除它)