【问题标题】:ActiveAdmin belongs_to/has_one relationship breaking show page of one of the modelsActiveAdmin belongs_to/has_one 关系破坏模型之一的显示页面
【发布时间】:2016-05-23 00:00:33
【问题描述】:

我有两个模型,一个是 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模型下通过以下方法解决了这个问题

def project_syndications
  ProjectSyndication.where(project_id: id)
end

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

任何帮助将不胜感激,在此先感谢您。

【问题讨论】:

  • 我知道这是一个老问题,但您找到解决方案了吗?我遇到了同样的问题。

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


【解决方案1】:

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

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

class Project; has_one :project_syndication; end

=> 这表明您的数据库具有字段 projects.project_syndication_id

=> 也许试试“has_many”

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

=> 案例提供与以下提供

=> 冗余代码? (删除它)

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

=> 冗余代码? (删除它)

【讨论】:

  • 您好,感谢您的回答。但是我不确定您在说什么,Project模型没有project_syndication_id,实际上是在具有project_id属性的ProjectSyndication模型中,表明一个项目有一个project_syndication。正如你在这里看到的:Rails Guide。您提到的冗余代码是 ActiveAdmin 代码,如果我删除它,ActiveAdmin 将无法工作。
  • 如果你有syndications.project_id,一个项目肯定可以有_many syndications...也许这就是罪魁祸首?
  • 我们不需要 has_many 关系,一个项目只有一个联合。我为什么要建立 has_many 关系?
  • 然后也许做 Project.has_one(:syndication, :dependent => :destroy) 和 Syndication.belongs_to(:project)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
相关资源
最近更新 更多