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

IT実務未経験から約1年、東京でフリーランスのRuby on Railsエンジニアに転職。約2年半、大阪中崎町でスリランカカレーの間借りしてました。フリーランスエンジニアになるためのノウハウ、スリランカの事を発信していきます。

【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.tech


www.malanka.tech


www.malanka.tech


www.malanka.tech




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


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

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



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

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


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

自分の代わりに、

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


最初の内は、

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

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


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


参考までに、

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


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

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


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

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


下記の記事で、

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


www.malanka.tech




Rubyを学習するならこちら


Udemy という動画教材です。


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




なんとUdemy は、

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


こまめにチェックして、

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




また、

Ruby関連の過去記事は下記にありますので、

合わせてチェックしてみてください◎


技術関連-Ruby カテゴリーの記事一覧 - スリ飯屋MaLankaのフリーエンジニアな日々

www.malanka.tech




フリーランスエンジニアのデメリットはこちら


今回のコロナで、

参画していたプロジェクトが終了し、被害を受けました。


そこで、

コロナ被害を受けて感じている、

フリーランスエンジニアのデメリット【6つ】について、

noteを書きました。


下記に当てはまる人に、参考になると思います。

現在、フリーランスエンジニアとして生きている人

今からフリーランスエンジニアになろうとしている人

フリーランスエンジニアだが、コロナの影響で仕事が途絶えた人


https://note.com/malanka666/n/n081d40a196bfnote.com








あなたもフリーランスになってみませんか?