Rails 5アプリケーションでは、ユーザーが入力したパラメータに従ってn個のレコードを作成するbulk_create関数を呼び出すajax put要求があります(これは魅力的です)。技術的には、生成されたばかりのデータを使用してCSVファイルも生成する必要があります。CSVファイルがRails 5アプリケーションでエクスポートされていない
AJAXコール:私のコントローラで
$('.bulk-button').on('click', function(){
$.ajax({
type: 'post',
url: '/admin/coupons/bulk-create?number='+$('#bulk-number').val()
});
});
:私のモデルでは
def bulk_create
iterations = params[:number].to_i
i = 0
sequence = [('a'..'z')].map(&:to_a).flatten
while i < iterations do
name = (0...6).map { sequence[rand(sequence.length)] }.join
Coupon.create(:name => name, :value => 10, :coupon_type => 'amount', :limit => 1, :expiration_date => Date.current + 365)
i+=1
end
coupons = Coupon.order('created_at DESC').limit(iterations)
respond_to do |format|
format.html { redirect_to(admin_coupons_path) }
format.csv { send_data coupons.to_csv }
end
end
:
def self.to_csv(options = {})
desired_columns = ["name", "value"]
CSV.generate(options) do |csv|
csv << desired_columns
all.each do |coupon|
csv << coupon.attributes.values_at(*desired_columns)
end
end
end
私はコンソールで生成されたエラーを参照してください、まだありませんありませんCSVファイルがエポートされています。どんな推測?
ありがとうございます!あなたがそこにある必要はありませんあなたのコード内のいくつかの合併症を持っている
URLに.csvを使用してみましたか? '/admin/coupons/bulk-create.csv?number = ...' – yoavmatchulsky
まず、モデルで定義されている 'self.to_csv'は、コントローラで' coupons.to_csv'を呼び出すときに呼び出されるものではありません。コントローラーのクーポンはActiveRecordクラスであり、クーポンクラスメソッドにアクセスすることはできません。一般に、to_csvはより多くの書式設定/レンダリングタイプの操作を行っているので、最初にモデル上で定義するべきではありません。新しいクラスを作成する必要があります(たとえば、CouponsCsv?)、その上にto_csvメソッドを記述します。さらに良いことに、おそらくこの問題のためにそこに宝石があります。また、上記のコメントによると、リクエストは.csvなしで処理されません。 – Glyoko