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

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

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

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

0回答

1250閲覧

【railsチュートリアル13章4.1】active_storageがundefined methodになる

kaoru-drosera

総合スコア23

Ruby on Rails

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

1クリップ

投稿2021/03/13 11:20

編集2021/04/06 23:04

更新情報

お待たせしました。
コード一覧に/app/models/micropost.rbを追記いたしました。

前提・実現したいこと

railsチュートリアル13章4.1を進めていたのですが、以下のようなエラーが出て進みません。

ターミナル

…/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/activerecord-6.1.3/lib/active_record/dynamic_matchers.rb:22:in `method_missing': undefined method `has_one_attached' for Micropost:Class (NoMethodError) from …/letslearncss_railstutorii/app/models/micropost.rb:3:in `<class:Micropost>'

テキスト通りにコードを書いても、コピペをしても、やり直しても状況が変わらず、困っております。
解決案をお教えいただけないでしょうか。

現状

13章4.1の演習を含めたすべてのコードを書き終え、rails testを行ったあと、このエラーを発見しました。どうやら大きめのエラーらしく、サーバーもコンソールもそのエラーで動かない状態です。

現在のコードは以下に表記いたしました。
どうやらhtml側でのエラーではないと思われるためhtml.erbのコードは割愛させていただきます。

ターミナル・active_storageをインストールした当初

$ rails active_storage:install Copied migration 20210313062613_create_active_storage_tables.active_storage.rb from active_storage $ rails db:migrate == 20210313062613 CreateActiveStorageTables: migrating ======================== -- create_table(:active_storage_blobs) -> 0.0977s -- create_table(:active_storage_attachments) -> 0.1685s -- create_table(:active_storage_variant_records) -> 0.0211s == 20210313062613 CreateActiveStorageTables: migrated (0.2878s) ===============

/app/models/micropost.rb

Ruby

1require "active_storage" 2 3class Micropost < ApplicationRecord 4 belongs_to :user 5 has_one_attached :image 6 default_scope -> { order(created_at: :desc) } 7 validates :user_id, presence: true 8 validates :content, presence: true, length: { maximum: 140 } 9 validates :image, content_type: { in: %w[image/jpeg image/gif image/png], 10 message: "must be a valid image format" }, 11 size: { less_than: 5.megabytes, 12 message: "should be less than 5MB" } 13end

「has_one_attached」を有効にしてしまうとエラーが出るため、学習を進める際はコメントアウトしていました。
「has_many_attached」でも同様です。

/app/controllers/microposts_controller.rb

ruby

1class MicropostsController < ApplicationController 2 before_action :logged_in_user, only:[:create, :destroy] 3 before_action :correct_user, only:[:destroy] 4 5 def create 6 @micropost = current_user.microposts.build(micropost_params) 7 @micropost.image.attach(params[:micropost][:image]) 8 if @micropost.save 9 flash[:success] = "Micropost created" 10 redirect_to root_url 11 else 12 @feed_items = current_user.feed.paginate(page: params[:page]) 13 render 'static_pages/home' 14 end 15 end 16 17 def destroy 18 @micropost.destroy 19 flash[:success] = "TOUKOU WO KESHIMASITA" 20 redirect_to request.referrer || root_url 21 end 22 23 private 24 25 def micropost_params 26 params.require(:micropost).permit(:content, :image) 27 end 28 29 def correct_user 30 @micropost = current_user.microposts.find_by(id: params[:id]) 31 redirect_to root_url if @micropost.nil? 32 end 33end

/db/migrate/[timestamp]_create_active_storage_tables.active_storage.rb

ruby

1# This migration comes from active_storage (originally 20170806125915) 2class CreateActiveStorageTables < ActiveRecord::Migration[5.2] 3 def change 4 create_table :active_storage_blobs do |t| 5 t.string :key, null: false 6 t.string :filename, null: false 7 t.string :content_type 8 t.text :metadata 9 t.string :service_name, null: false 10 t.bigint :byte_size, null: false 11 t.string :checksum, null: false 12 t.datetime :created_at, null: false 13 14 t.index [ :key ], unique: true 15 end 16 17 create_table :active_storage_attachments do |t| 18 t.string :name, null: false 19 t.references :record, null: false, polymorphic: true, index: false 20 t.references :blob, null: false 21 22 t.datetime :created_at, null: false 23 24 t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true 25 t.foreign_key :active_storage_blobs, column: :blob_id 26 end 27 28 create_table :active_storage_variant_records do |t| 29 t.belongs_to :blob, null: false, index: false 30 t.string :variation_digest, null: false 31 32 t.index %i[ blob_id variation_digest ], name: "index_active_storage_variant_records_uniqueness", unique: true 33 t.foreign_key :active_storage_blobs, column: :blob_id 34 end 35 end 36end 37

/config/environments/development.rb

ruby

1 # Store uploaded files on the local file system (see config/storage.yml for options). 2 config.active_storage.service = :local

/config/environments/production.rb

ruby

1 # Store uploaded files on the local file system (see config/storage.yml for options). 2 config.active_storage.service = :local

/config/environments/test.rb

ruby

1 # Store uploaded files on the local file system in a temporary directory. 2 config.active_storage.service = :test

gem list

*** LOCAL GEMS *** abbrev (default: 0.1.0) actioncable (6.1.3, 6.1.2.1, 6.1.1) actionmailbox (6.1.3, 6.1.2.1, 6.1.1) actionmailer (6.1.3, 6.1.2.1, 6.1.1) actionpack (6.1.3, 6.1.2.1, 6.1.1) actiontext (6.1.3, 6.1.2.1, 6.1.1) actionview (6.1.3, 6.1.2.1, 6.1.1) activejob (6.1.3, 6.1.2.1, 6.1.1) activemodel (6.1.3, 6.1.2.1, 6.1.1) activerecord (6.1.3, 6.1.2.1, 6.1.1) activestorage (6.1.3, 6.1.2.1, 6.1.1) activesupport (6.1.3, 6.1.2.1, 6.1.1) addressable (2.7.0) ansi (1.5.0) autoprefixer-rails (10.2.4.0) base64 (default: 0.1.0) bcrypt (3.1.16) benchmark (default: 0.1.1) bigdecimal (default: 3.0.0) bindex (0.8.1) bootsnap (1.7.2, 1.7.0) bootstrap (4.6.0) bootstrap-sass (3.4.1) bootstrap-will_paginate (1.0.0) builder (3.2.4) bundler (default: 2.2.3, 2.0.1) byebug (11.1.3) capybara (3.35.3) cgi (default: 0.2.0) childprocess (3.0.0) coderay (1.1.3) concurrent-ruby (1.1.8) crass (1.0.6) csv (default: 3.1.9) date (default: 3.1.0) dbm (default: 1.1.0) debug (default: 0.1.0) delegate (default: 0.2.0) did_you_mean (default: 1.5.0) digest (default: 3.0.0) drb (default: 2.0.4) english (default: 0.7.1) erb (default: 2.2.0) erubi (1.10.0) etc (default: 1.2.0) execjs (2.7.0) faker (2.16.0) fcntl (default: 1.0.0) ffi (1.15.0, 1.14.2) fiddle (default: 1.0.6) fileutils (default: 1.5.0) find (default: 0.1.0) formatador (0.2.5) forwardable (default: 1.3.2) gdbm (default: 2.1.0) getoptlong (default: 0.1.1) globalid (0.4.2) guard (2.16.2) guard-compat (1.2.1) guard-minitest (2.4.6) i18n (1.8.9, 1.8.8, 1.8.7) io-console (default: 0.5.6) io-nonblock (default: 0.1.0) io-wait (default: 0.1.0) ipaddr (default: 1.2.2) irb (default: 1.3.0) jbuilder (2.11.2) jquery-rails (4.4.0) json (default: 2.5.1) listen (3.4.1) logger (default: 1.4.3) loofah (2.9.0) lumberjack (1.2.8) mail (2.7.1) marcel (0.3.3) matrix (default: 0.3.1) method_source (1.0.0) mimemagic (0.3.5) mini_mime (1.0.2) minitest (5.14.4, 5.14.3, 5.11.3, 5.10.3) minitest-reporters (1.4.3, 1.3.8, 1.1.19) msgpack (1.4.2) mutex_m (default: 0.1.1) nenv (0.3.0) net-ftp (default: 0.1.1) net-http (default: 0.1.1) net-imap (default: 0.1.1) net-pop (default: 0.1.1) net-protocol (default: 0.1.0) net-smtp (default: 0.2.1) nio4r (2.5.7, 2.5.5, 2.5.4) nkf (default: 0.1.0) nokogiri (1.11.1 x86_64-darwin) notiffany (0.1.3) observer (default: 0.1.1) open-uri (default: 0.1.0) open3 (default: 0.1.1) openssl (default: 2.2.0) optparse (default: 0.1.0) ostruct (default: 0.3.1) pathname (default: 0.1.0) pg (1.2.3) popper_js (1.16.0) pp (default: 0.1.0) prettyprint (default: 0.1.0) prime (default: 0.1.2) pry (0.14.0, 0.13.1) pstore (default: 0.1.1) psych (default: 3.3.0) public_suffix (4.0.6) puma (5.2.2, 5.2.1, 5.2.0) racc (1.5.2, default: 1.5.1) rack (2.2.3) rack-mini-profiler (2.3.1) rack-proxy (0.6.5) rack-test (1.1.0) rails (6.1.3, 6.1.2.1, 6.1.1) rails-controller-testing (1.0.5) rails-dom-testing (2.0.3) rails-html-sanitizer (1.3.0) railties (6.1.3, 6.1.2.1, 6.1.1) rake (13.0.3) rb-fsevent (0.10.4) rb-inotify (0.10.1) rdoc (default: 6.3.0) readline (default: 0.0.2) readline-ext (default: 0.1.1) regexp_parser (2.1.1, 2.0.3) reline (default: 0.2.0) resolv (default: 0.2.0) resolv-replace (default: 0.1.0) rexml (3.2.4) rinda (default: 0.1.0) ruby-progressbar (1.11.0) rubyzip (2.3.0) sass-rails (6.0.0) sassc (2.4.0) sassc-rails (2.1.2) securerandom (default: 0.1.0) selenium-webdriver (3.142.7) semantic_range (3.0.0, 2.3.1) set (default: 1.0.1) shellany (0.0.1) shellwords (default: 0.1.0) singleton (default: 0.1.1) spring (2.1.1) sprockets (4.0.2) sprockets-rails (3.2.2) sqlite3 (1.4.2) stringio (default: 3.0.0) strscan (default: 3.0.0) syslog (default: 0.1.0) tempfile (default: 0.1.1) thor (1.1.0) tilt (2.0.10) time (default: 0.1.0) timeout (default: 0.1.1) tmpdir (default: 0.1.1) tracer (default: 0.1.1) tsort (default: 0.1.0) turbolinks (5.2.1) turbolinks-source (5.2.0) tzinfo (2.0.4) un (default: 0.1.0) uri (default: 0.10.1) weakref (default: 0.1.1) web-console (4.1.0) webdrivers (4.6.0, 4.5.0) webpacker (5.2.1) websocket-driver (0.7.3) websocket-extensions (0.1.5) will_paginate (3.3.0) xpath (3.2.0) yaml (default: 0.1.1) zeitwerk (2.4.2) zlib (default: 1.1.0)

試したこと

googleで検索を試みてもどれも同じような情報しか出ず、以下のサイト

https://github.com/sferik/rails_admin/issues/3025

が唯一手がかりになりそうでしたが、そこに書かれていた
「私も同じ問題を抱えていると思います。を使用してrails_admin初期化子内でモデルを構成しようとしましたconfig.model Product do ... end。代わりにそうすべきだったconfig.model 'Product' do ... end。
モデル名は引用符で囲む必要があります。(※google翻訳による翻訳)」
がわからず、解決を断念しました。

以上挙げたもの以外に何か心当たりがある、という情報をお持ちの方いらっしゃいましたらどうかお願いいただけないでしょうか。よろしくお願いいたいします。

補足情報(FW/ツールのバージョンなど)

ブラウザ:chrome(最新のバージョン)
テキストエディタ:atom(ver:1.32.2)
rails: Rails 6.1.3

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

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

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

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

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

ha4gu

2021/03/25 11:58 編集

エラー出力に from …/letslearncss_railstutorii/app/models/micropost.rb:3:in `<class:Micropost>' とあるように、エラーはMicropostのModelから出ています。 そちらの記述内容が分かるように、まずは app/models/micropost.rb の内容を貼り付けてもらわねば判断は難しいでしょう。
kaoru-drosera

2021/04/05 03:50

遅くなりました。 ご回答ありがとうございます。 ご用意いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問