У меня есть повторяющиеся методы в моей модели, и я хочу поместить эти коды в одно место и просто хочу получить к ним доступ в своей модели.
В моей модели есть несколько методов, таких как:
class ProductionProductivity7 < ApplicationRecord
def self.import1(file)
spreadsheet = Roo::Spreadsheet.open(file.path)
header = spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header, spreadsheet.row(i)].transpose]
puts row.to_hash
product = find_by(id: row["id"]) || new
product.attributes = row.to_hash
product.save!
end
end
def self.search(search,compare)
if search == "All"
all.order(:id)
elsif compare == "Bihar vs District"
where("Districts = ? OR Districts = ?", search, "Bihar")
else
where(Districts: search)
end
end
конец
Есть еще 3 таких метода, я хочу поместить этот блок кода в помощник и просто хочу вызвать его внутри модели. Для этого я попробовал поместить эти коды в мой помощник. И я вызываю это, используя:
include ApplicationController.ProductionProductivity7sHelper
Я включаю это в свою модель, но получаю эту ошибку:
undefined method `ProductionProductivity7sHelper' for ApplicationController:Class
Мой код контроллера выглядит так:
def test
@ProductionProductivity7s = ProductionProductivity7.search(params[:search],compare)
a = ProductionProductivity7.query(@ProductionProductivity7s,params[:year],rain_fall_type,views,compare)
end
Я добавил имя модуля code.rb в папку приложения.
module Code
def search(search_scope,compare)
if search_scope == "All"
all.order(:id)
elsif compare == "Bihar vs District"
where("Districts = ? OR Districts = ?", search_scope, "Bihar")
else
where(Districts: search_scope)
end
end
end
Я просто хочу написать все свои методы моей модели где-нибудь, это может быть либо модуль, либо помощник, ничего не меняя. Возможно ли, что я просто хочу, чтобы этот блок кода был в моей модели.
Я добавляю весь код контроллера и код модели в gist-файлы. Пожалуйста, посмотрите.Ссылка на мой контроллер и код модели
Я получаю эту ошибку:
undefined method `search' for #<Class:0x00007ff115974fd8> Did you mean? search1
extend Code
в вашей модели. (Code
кажется плохим именем, но я полагаю, вы измените его позже?) - person jvillian   schedule 06.07.2018app/models/application_record.rb
и вызвать его из любой модели, как и любые методы экземпляра модели.. плюс у вас будет доступ кself
как к любому экземпляру вызывающей модели. - person sa77   schedule 07.07.2018