首页 > 解决方案 > 为什么 ActiveSupport::Concern 会返回 NoMethodError?

问题描述

我有一个小型应用程序,为了避免代码重复,我使用了 ActiveSupport::Concern,但是出了点问题,我不断收到消息:

NoMethodError in Private::MessagesController#index

undefined method `get_messages' for #<Private::MessagesController:0x00007f644687de88>

应用程序运行在

Rails version             5.2.2;
Ruby version              2.5.3-p105 (x86_64-linux);
RubyGems version          2.7.6;
Rack version              2.0.6

在:控制器/关注/messages.rb

require 'active_support/concern'
module Messages
  extend ActiveSupport::Concern
  def get_messages(conversation_type, messages_amount)
  ....
  end
end

在控制器/私人/messages_controller.rb

class Private::MessagesController < ActionController::Base
  include Messages
  def index
    get_messages('private', 10)
    ....
  end 
end

我做了很多研究,但我没有设法解决这个问题。

作为替代,我移动了

def get_messages(conversation_type, messages_amount)

进入 controllers/private/messages_controller.rb 并且它似乎可以工作,但我想在另一个控制器中使用完全相同的方法,所以如果我能设法将它与 ActiveSupport::Concern 一起使用会更好

有任何想法吗?

非常感谢!

编辑:

我将模块“Messages”重命名为“Messageable”(以及相关文件),现在可以了。

标签: ruby-on-railsactivesupport-concern

解决方案


推荐阅读