スリ飯屋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 エラーになる時の対処法


転職を絶対成功させたい、駆け出しエンジニアの方へ


このブログからよく購入されている、

駆け出しエンジニアのマインドセットができるnote2点です↓↓↓


note.com


note.com





こんにちは、mah(@RailsRubyMah6h)です。


このブログでは、

僕が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




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


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

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


f:id:mah666hhh:20200615083445p:plain


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

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


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

自分の代わりに、

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


最初の内は、

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

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


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


参考までに、

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


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

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


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

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


下記の記事で、

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


www.malanka.tech




Rubyを学習するならこちら


Udemy という動画教材です。


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




なんとUdemy は、

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


こまめにチェックして、

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




また、

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

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


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

www.malanka.tech




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


今回のコロナで、

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


そこで、

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

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

noteを書きました。


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

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

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

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


note.com





最後までお読み頂きありがとうございました★


もしよかったらTwiiterのフォローもお願いします★