質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

4100閲覧

【Rails6】エラーになったりならなかったりする【Unknown validator/ActiveStorage】

shisha

総合スコア86

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/07/03 22:12

編集2020/07/04 10:44

追記

タイトルを「最初に特定のページにアクセスするとエラーになる」としていましたが、
でも必ずしもそうじゃないような感じで「1度目のアクセス以降はエラーにならない」が正しいかもしれず、
タイトルを変更しました。
エラーになる条件がよくわからないです。

困っていること

ArgumentError (Unknown validator: 'ContentTypeValidator'):
というエラーがでます。

少し試してみると、特定のページ(/microposts → MicropostsController#index)に最初に入ったときにエラーがでます。他のページからそのページ(/microposts)に入ると、問題ないようです。

なお、heroku にpush して本番環境で試してみると、どのページであっても同じエラー「ArgumentError (Unknown validator: 'ContentTypeValidator')」がでます(heroku logs --tailとして、ログを閲覧して確かめてます)。

環境

Rails version 6.0.3.2
Ruby version ruby 2.6.6p146 (2020-03-31 revision 67876) [x64-mingw32]
RubyGems version 3.0.3
Rack version 2.2.3

Rails6 の ActiveStorage を利用してます。

エラー画面

Started GET "/microposts" for 127.0.0.1 at 2020-07-04 06:39:39 +0900 (23.9ms) SELECT sqlite_version(*) (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC Processing by MicropostsController#index as HTML User Load (21.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] ↳ app/helpers/sessions_helper.rb:10:in `current_user' Completed 500 Internal Server Error in 424ms (ActiveRecord: 23.4ms | Allocations: 25537) ArgumentError (Unknown validator: 'ContentTypeValidator'): app/models/micropost.rb:15:in `<class:Micropost>' app/models/micropost.rb:1:in `<top (required)>' app/controllers/microposts_controller.rb:61:in `index'

エラーの場所

ruby

1class Micropost < ApplicationRecord 2 3 validates :image, content_type: { in: %w[image/jpeg image/gif image/png], 4 message: "must be a valid image format" }, 5 size: { less_than: 5.megabytes, 6 message: "should be less than 5MB" } 7end

Railsチュートリアル(第6版)の第13章 リスト13.66と全く同じ書き方をしています。
この第2引数の content_type というvalidationはないと怒られているようです。
content_typeのところで、特定のページに最初に入ったときのみエラーがでるので不可解です。

#最後に
全くわからず、直接解決にいたらずとも、解決のヒントになりそうなことがあれば、教えていただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

私の場合は、gem入ってるのに同じエラーが発生しました。
一旦当該 validation をコメントアウトするとエラーは出なくなりました。
そこで一旦コメントアウトしたvalidationを元に戻し、
再度 bundle install を実施、
rails server を control+c で止めて、
もう一度 rails server を立ち上げると正常に動き出しました。

投稿2020/09/26 21:11

Randy_Tozuka

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shisha

2020/09/26 21:43

gemが入っているのに同じエラーが発生したというより、厳密には、Gemfileにgemを書いたのに同じエラーが発生した、という感じがしますね。Gemfileにgemを書くだけだとダメで、bundle installして立ち上げなおして、ようやくgemが入ったといえそうです。
Randy_Tozuka

2020/09/29 22:25

bundle install はもちろん実行したのですが、rails server を再起動させずにいるとエラーが出るので、いったん control+c でサーバーを止め、 rails s でサーバーを再起動させるとエラーは出なくなりました。
guest

0

自己解決

Railsチュートリアル(第6版) 第13章を見返してて気がついたのですが、必要なgemが入ってなかったです。

ruby

1gem 'active_storage_validations', '~> 0.8'

【追記】上記を書いた上で、bundle installして、再度サーバーを立ち上げなおして、アプリにgemを反映させるようにして下さい。特定のgemに限らない一般的な話です。

投稿2020/07/07 20:08

編集2020/10/19 05:10
shisha

総合スコア86

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問