エラー内容
RailsでModelに定義したメソッドがControllerで呼び出すと、"undefined method `メソッド名'"になるエラー。(ControllerとModelで同じメソッド名を定義している場合)
解決方法
モデルのメソッド名の前に "self." を付けたらエラー解消され、
コントローラーで呼び出せた!!
要は、以下のようにクラスメソッドになり使える範囲広がる的な。
selfなし → インスタンスメソッド
selfあり → クラスメソッド
models/モデル名.rb
def self.メソッド名
end
コード詳細
controllerもmodelも両方、"import_csv"という名前で定義したため、エラーが発生した可能性あり。(追加検証は省略)
modelで定義したメソッドに"self."をつけることでエラー解消。
controllers/import.rb
# コントローラー
class ImportController < ApplicationController
def import_csv
if Information.import_csv(params[:csv_file])
xxxx
end
end
end
models/information.rb
# モデル
class Information < ApplicationRecord
def self.import_csv(csv_file)
xxxx
end
end
あとがき
self.の効果はplz google!
参考
https://teratail.com/questions/102215
https://qiita.com/suzuki-koya/items/1553c405beeb73f83bbc