###前提・実現したいこと
Rails初心者です.初歩的な質問ですが,ご容赦ください.
railsで自作ライブラリを使うため,以下のサイトを参考に対応しています.
https://qiita.com/azusanakano/items/885fe3236977580b00c9
自作ライブラリで利用しているクラス名と同名のModelをscaffoldで作成しました.
Model用のクラスを呼び出すと以下エラーが発生します.
対処方法についておしえてください.
(別名にすれば問題ないのですが,同名を利用する場合の対応方法について把握したい,
名付けの観点で同名にするのがモデルを表す用途で適切である,という理由で質問させていただきます)
###発生している問題・エラーメッセージ
LoadError: Unable to autoload constant Foo, expected /path to/app_name/lib/mylib/foo.rb to define it
###該当のソースコード
以下,方法にて事象再現可能だと思います.Railsバージョンは5.1.4です.
1 以下コマンドを実行する.
$ rails new footest $ cd footest $ mkdir lib/mylib $ vi lib/mylib/foo.rb
2 以下内容のfoo.rbを作成する.
ruby
1module Mylib 2 class Foo 3 attr_reader :name 4 5 def initialize name 6 @name = name 7 end 8 end 9 10 def self.get_foos 11 12 end 13end
3 config/application.rbのclass Application内にconfig.autoload_pathsの行を追加する.
ruby
1module Footest 2 class Application < Rails::Application 3 # Initialize configuration defaults for originally generated Rails version. 4 config.load_defaults 5.1 5 6 # Settings in config/environments/* take precedence over those specified here. 7 # Application configuration should go into files in config/initializers 8 # -- all .rb files in that directory are automatically loaded. 9 10 config.autoload_paths += %W(#{config.root}/lib/mylib) #追記 11 end 12end
4 以下コマンドを実行する.
$ rails generate scaffold Foo name:string $ rails db:migrate
5 db/seeds.rbに以下内容を記載する.
ruby
1require 'foo' 2 3a = Mylib::Foo.new("foo") 4puts a.name 5Foo.create(:name => a.name)
6 以下コマンドを実行すると,エラーが発生します.
$ rails db:seed foo rails aborted! LoadError: Unable to autoload constant Foo, expected /path_to/footest/lib/mylib/foo.rb to define it /path_to/footest/db/seeds.rb:13:in `<top (required)>' /path_to/footest/bin/rails:9:in `require' /path_to/footest/bin/rails:9:in `<top (required)>' /path_to/footest/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:seed (See full trace by running task with --trace)
###試したこと
###補足情報(言語/FW/ツール等のバージョンなど)
回答2件
あなたの回答
tips
プレビュー