저는 매우 비슷한 코드를 가진 컨트롤러에서 두 가지 방법을가집니다. 내가 어떻게 그들을 말릴 수 있는지 궁금해! 그들은 모두 csv-importer gem을 사용하여 csv 파일을 구문 분석합니다.비슷한 코드를 컨트롤러 메서드에서 사용하기
sales_controller.rb
def import_csv_test
user_id = params[:user_id]
import = ImportSaleCSV.new(file: params[:file]) do
after_build do |sale|
sale.user_id = user_id
skip! if sale.email == nil
skip! if sale.order_date == nil
skip! if sale.amount == nil
end
end
import.run!
redirect_to lifecycle_grid_sales_path, notice: import.report.message
end
def import_ftp
user_id = params[:user_id]
import = ImportSaleCSV.new(path: './public/uploads/gotcha.csv') do
after_build do |sale|
sale.user_id = user_id
skip! if sale.email == nil
skip! if sale.order_date == nil
skip! if sale.amount == nil
end
end
import.run!
redirect_to lifecycle_grid_sales_path, notice: import.report.message
end
감사합니다! 를 호출 한 후
def import(hash)
user_id = params[:user_id]
import = ImportSaleCSV.new(hash) do
after_build do |sale|
sale.user_id = user_id
skip! if sale.email == nil
skip! if sale.order_date == nil
skip! if sale.amount == nil
end
end
import.run!
redirect_to lifecycle_grid_sales_path, notice: import.report.message
end
을 그리고 :
import({file: params[:file]})
import({path: './public/uploads/gotcha.csv'})
당신이 추출 할 수 있도록 그 방법은 컨트롤러에 속하는하지 않는 것
그래, 그건 유일한 차이점 인 것처럼 보입니다. –
멋지다. 고마워! 내 sales_controller.rb에서 직접 가져 오기 방법을 정의하겠습니까? 그리고 이것을 이렇게 부릅니까? '데프 수입 import_csv_test ({파일 : PARAMS [: 파일]}) 끝 ' – AakLak
그래, 당신이 할 수 있습니다. 메서드가 컨트롤러에 있어야하는 것은 아닙니다. 그래서 다른 곳에서 추출해야 할 것입니다. 가장 좋은 선택은 하나의 public 메소드'call' (정확히'import' 메소드와 동일)를 가진 Service Class와 필요할 경우 여러 개인 메소드가 될 것입니다. 따라서 컨트롤러에서 해당 서비스의 인스턴스를 만들고 호출 메소드를 호출 할 수 있습니다. 나는 당신을위한 유용한 링크로 나의 대답을 편집 할 것이다. – VAD