スリ飯屋MaLankaのフリーエンジニアな日々

このブログでは、フリーランス6期目となる自身の実体験から、フリーランスエンジニアになるためのノウハウ、ブログや沖縄移住、スリランカの最新情報について発信します。

【Ruby on Jets】include ActiveModel::ValidationsがNameError: uninitialized constantエラーになる時の対処法

※提携先の広告(リンク、バナー等)を含む場合があります


【Ruby on Jets】  include Active Model::Validationsが、  NameError: uninitialized constant エラーになる時の対処法


こんにちは、現役沖縄フリーランスエンジニアのmah(MaLanka)です。


このブログでは、

僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、

ノウハウなどを書いていきます。


今回は、

  • Ruby on Jetsで、include ActiveModel::Validationsが、NameError: uninitialized constantエラーになる時の対処法

についてです。

【Ruby on Jets】include ActiveModel::ValidationsがNameError: uninitialized constantエラーになる時の対処法



起こったこと


Ruby on Jetsでバリデーションを機能させるため、

ActiveModel::Validations をincludeし、

コンソールを起動。


すると、定数読み込みに失敗するエラーが発生。


NameError: uninitialized constant Article::ActiveModel


下記のようなモデルです。

# app/models/article.rb

class Article < Dynomite::Item
  # dynomite docs
  # https://github.com/tongueroo/dynomite

  include ActiveModel::Validations

  column :id, :title, :published_at, :link

  validates_presence_of :title, :published_at, :link
end


gemのドキュメント通りなんだけどなあ...


gem 'dynomite'

https://github.com/tongueroo/dynomite#validations


原因


調べていると、下記の記事がヒット。

https://github.com/tongueroo/dynomite#validations

You have to require the whole of active_model since it uses autoload to "lazily require" classes as needed.


auto_loadを使用して必要に応じてクラスを「遅延して要求する」ため、active_model全体を要求する必要があります。 次のコードは正常に動作します。


つまり、

ActiveModel がまだ読みこまれていない段階で、

ActiveModel::Validations を読み込もうとしていたということ。


なので、class定義の前に、

明示的に active_model を読み込みさせれば良い、

ということと解釈。


対処法


モデルに下記の1行を追記すればOKです。

require 'active_model'


ファイルは下記のようになります。

# app/models/article.rb

require 'active_model' <<<=== class XXX より前に、これを追記

class Article < Dynomite::Item
  # dynomite docs
  # https://github.com/tongueroo/dynomite

  include ActiveModel::Validations

  column :id, :title, :published_at, :link

  validates_presence_of :title, :published_at, :link
end


検証


Jetsコンソールで確認します。

$ be jets c
Jets booting up in development mode!
irb(main):001:0> a = Article.new(id: '123')
=> #<Article:0x00007f7fbe47bb30 @attrs={:id=>"123"}>

irb(main):002:0> a.valid?
=> true


コンソールが起動し、

valid? も呼び出せたので、

ActiveModel::Validations

が正常に読み込み出来たことが確認出来ました★




以上、

  • Ruby on Jetで、include ActiveModel::Validationsが、NameError: uninitialized constantエラーになる時の対処法

でした。


初めての方はこちらのオススメ記事もどうぞ


note.com


www.malanka.org


www.malanka.org


www.malanka.org


www.malanka.org


フリーランスエンジニアになりたい方はこちら


フォスターフリーランスという、

フリーランス専門エージェントを使うのがおすすめです。



自分もフォスターフリーランスを使って、

フリーランスエンジニアとしてのキャリアをスタートさせました。


フォスターフリーランスを使うと、

自分の代わりに、

プロの営業さんが案件を探してくれます。


最初の内は、

自分で営業なんてとても出来ないので、

非常にありがたかったです。


しかも無料で利用できる。


参考までに、

自分がお世話になっているエージェントを2つご紹介しておきます。


話を聞くだけでもOKなので、

ぜひ利用してみてください。


フォスターフリーランス【案件保有数5000件以上。業界25年の超老舗】

無料でフォスターフリーランスに登録


下記の記事で、

フォスターフリーランスの特徴について解説しています。


www.malanka.org


Rubyを学習するならこちら


Udemy という動画教材です。


はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう


なんとUdemy は、

60%OFFのセールをやっている時もあります。


こまめにチェックして、

スキルアップを図りましょう★