1

私は Rails 5 を持っていますApplicationRecord:

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end

から継承するモデルの束ApplicationRecord。ここで、各モデル名をカスタマイズした方法でデータベース テーブルにマップしたいと考えています。たとえば、次のことができます。

class MyModel < ApplicationRecord
  self.table_name = 'MY_MODELS'   # overrides default 'my_models'
end

しかし、すべてのマッピングは予測可能であるため、基本クラスでそれを行うだけだと思いました。

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true

  def self.table_name
    self.name.underscore.pluralize.upcase
  end
end

...しかし、技術的にはクラスメソッドはサブクラスに継承されるべきですが、それはうまくいきませんでした。(理由はわかりますか?)

私はまた、次のようなことをするメソッドを追加しようとしました:

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true

  def self.inherited(subclass)
    subclass.table_name = subclass.name.underscore.pluralize.upcase
  end
end

これもうまくいきませんでした。これを行うための最良の方法のアイデアはありますか?

4

2 に答える 2

2

table_name各モデルの機能を実装する懸念を追加することで、これを解決しました。

于 2016-03-30T15:53:59.227 に答える