1

我创建了一个关注点来添加一个enumclass_methods

# app/models/concerns/addressable.rb
module Addressable
  extend ActiveSupport::Concern

  included do
    enum address_province: {
      Queen: 'Q',
      Bear:  'B'
    }
  end

  class_methods do
    def options_for_cities
      %w[a b]
    end

    def scream
      'aaaaaaaaaaaaaaaaaa'
    end
  end
end

# app/models/order.rb
class Order < ApplicationRecord
  include Addressable
end

但是,当我尝试在 中执行这些方法中的任何一个时Order,它们都不起作用。

Running via Spring preloader in process 3004
Loading development environment (Rails 5.1.2)

irb(main):001:0> Order.options_for_cities
NoMethodError: undefined method `options_for_cities' for Order (call 'Order.connection' to establish a connection):Class
Did you mean?  options_for_with_status
    from (irb):1
irb(main):002:0> Order.scream
NoMethodError: undefined method `scream' for Order (call 'Order.connection' to establish a connection):Class
    from (irb):2
irb(main):003:0> Order.address_provinces
NoMethodError: undefined method `address_provinces' for Order (call 'Order.connection' to establish a connection):Class
    from (irb):3
4

2 回答 2

2

看来您与现有的 Addressable 模块有冲突。尝试将您的模块名称更改为其他名称。

于 2017-10-15T05:08:17.717 回答
-1

这些都不是问题。所发生的只是连接在需要时才被实例化。

尝试

Order.connection

Order.count

你得到订单的欲望计数。

于 2017-12-01T06:15:02.433 回答