更新情報
お待たせしました。
コード一覧に/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
あなたの回答
tips
プレビュー