複数のデータベースからデータを引き出しています。
どのデータベースもテーブルの構成は同じです。
共通のメソッドをmoduleで1つにまとめたいのですがうまくいきません。
Active Recordのクラスメソッドをmoduleの中でどう定義すればいいのか思いつきません。
環境
macOS 10.15.7
Ruby 2.7.2
Active Record 6.0.3
PostgreSQL 13.0
現在、動いているコード
tokyo.rb
ruby
1class Tokyo < ActiveRecord::Base 2 establish_connection( 3 adapter: "postgresql", 4 host: "", 5 username: "myname", 6 password: "", 7 database: "tokyo" 8 ) 9 10 def name 11 users = Tokyo.all 12 users.each do |user| 13 if user['id'] == 1 14 puts user['id'] 15 puts user['name'] 16 puts user['address'] 17 end 18 end 19 end 20end
osaka.rb
ruby
1class Osaka < ActiveRecord::Base 2 establish_connection( 3 adapter: "postgresql", 4 host: "", 5 username: "myname", 6 password: "", 7 database: "osaka" 8 ) 9 10 def name 11 users = Osaka.all 12 users.each do |user| 13 if user['id'] == 1 14 puts user['id'] 15 puts user['name'] 16 puts user['address'] 17 end 18 end 19 end 20end
main.rb
ruby
1require 'active_record' 2require_relative 'tokyo' 3require_relative 'osaka' 4 5Tokyo.new.name 6Osaka.new.name
上のコードのようにname
メソッドをモデルごとに定義すれば動くのですが、moduleでまとめたいと思っています。
エラーになるコード
name.rb
ruby
1module Name 2 def name 3 users = self.all 4 users.each do |user| 5 if user['id'] == 1 6 puts user['id'] 7 puts user['name'] 8 puts user['address'] 9 end 10 end 11 end 12end
tokyo.rb
ruby
1require_relative 'name' 2 3class Tokyo < ActiveRecord::Base 4 establish_connection( 5 adapter: "postgresql", 6 host: "", 7 username: "myname", 8 password: "", 9 database: "tokyo" 10 ) 11 12 include Name 13end
main.rb
ruby
1require 'active_record' 2require_relative 'tokyo' 3 4Tokyo.new.name
エラー内容
ruby main.rb #=> `method_missing': undefined method `all' for #<*************> (NoMethodError)
mdule内をdef self.name
にしてmain.rbをTokyo.name
にするとなにも反応しません。
解決方法があればよろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー