【问题标题】:NameError in Admin::ResidentsController#destroy RailsAdmin::ResidentsController#destroy Rails 中的 NameError
【发布时间】:2016-04-03 07:50:17
【问题描述】:

当我使用 active admin

删除常驻模型对象时出现名称错误

我有常驻模型:

class Resident < ActiveRecord::Base
  has_many :leaves,dependent: :delete_all
end

第二个是离开模型:

class Leave < ActiveRecord::Base
  belongs_to :resident
end

给我以下错误

另外,rails 误解了 leave 名称并将其更改为 leafe.. 所以我重命名或重构文件: decorators/leafe_decorator.rb decorators/leave_decorator.rb

在装饰器测试中类似。

现在我再次在整个代码中搜索 Leafe 关键字,但它不存在。并且仍然得到那个 error 。我该怎么办?

【问题讨论】:

    标签: ruby-on-rails ruby activerecord activeadmin activemodel


    【解决方案1】:

    这是因为 Rails 的综合复数规则导致单词“leaves”的单数错误(无论如何应该是“leaf”)

    您可以更改模型以匹配预期的单词“叶子”,或者您可以教 Rails 正确的单数形式。

    为此,只需将其添加到初始化程序中:

    ActiveSupport::Inflector.inflections do |inflect|
      inflect.irregular 'leave', 'leaves'
    end
    

    在您的初始化程序目录中应该已经有一个名为 inflections.rb 的文件,该文件记录了各种其他 Rails 变形特性。

    这样您的原始代码应该可以工作,而无需重命名任何文件或模型。

    【讨论】:

      【解决方案2】:

      远射,但这可能与 Rails 试图“聪明”地使用复数模型名称(例如能够将“Person”复数为“People”)。

      在这种情况下,我认为 Rails 会期望模型是 Leaf:

      class Leaf < ActiveRecord::Base
        belongs_to :resident
      end
      

      关联(和表名)为leaves

      class Resident < ActiveRecord::Base
        has_many :leaves, dependent: :delete_all
      end
      

      【讨论】:

      • 但关键词是LEAFE一个额外的'E'
      • rails console"person".pluralize => "people""leave".pluralize => "leaves"。另外,:delete_all 应该是:destroy 吗?
      • 那么我应该把我从leafe更改为离开的所有文件都重命名吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多