3

注意:在您考虑将此问题标记为其他类似问题的重复之前,请注意这个问题是关于 Rails 中的问题的问题,而我搜索的其他问题涉及控制器。毫无疑问,我发现了,这与关注有关。

我有一个名为comments_deletion.rb的文件app/models/concerns,它包含以下代码:

module CommentsDeletion
  extend ActiveSupport::Concern

  included do
    after_save :delete_comments, if: :soft_deleted?
  end

  def soft_deleted?
    status == 'deleted'
  end

  def delete_comments
    comments.each &:destroy
  end
end

我试图通过编写以下代码在我的模型中混合文件:

class Employee < ActiveRecord::Base
  include CommentsDeletion
  # all the other code
end

只是这样做,然后在调用 时rails console,它给了我以下错误:

Circular dependency detected while autoloading constant Concerns::CommentsDeletion

我正在使用 Rails 4.0.2,这件事让我发疯了,我无法弄清楚我的代码有什么问题。

4

2 回答 2

2

很奇怪,Rails 文档中的任何地方都没有提到以下内容,但是有了它,我的代码可以毫无问题地工作。

您所要做的就是替换CommentsDeletionConcerns::CommentsDeletion. 否则,您必须Concerns在以后想要混合到模型中的模块名称之前加上。

现在,这就是我的模块驻留在关注目录中的样子:

module Concerns::CommentsDeletion
  extend ActiveSupport::Concern

  included do
    after_save :delete_comments, if: :soft_deleted?
  end

  def soft_deleted?
    status == 'deleted'
  end

  def delete_comments
    comments.each &:destroy
  end
end
于 2016-05-18T06:52:13.420 回答
0

就我而言,我的代码如下:

#models/user.rb
class User < ApplicationRecord
  include User::AuditLog
end

#model/concern/user/audit_log.rb
module User::AuditLog
  extend ActiveSupport::Concern
end

它在开发环境中工作正常,但在生产中它得到错误作为标题。当我更改为这个时,它对我来说很好。如果文件夹名称与模型名称相同,请重命名相关文件夹名称。

#models/user.rb
class User < ApplicationRecord
  include Users::AuditLog
end

#model/concern/users/audit_log.rb
module Users::AuditLog
  extend ActiveSupport::Concern
end
于 2017-09-14T04:58:59.787 回答