Rails CSV Basic

sortie csv

<%= link_to "CSV", products_path(format: :csv) %>
  def index
    respond_to do |format|
      format.html do
        @search = Product.ransack(params[:q])
        @products = @search.result    
      end

      format.csv do
        @products = Product.all
        data= CSV.generate do |csv|
          column_names = %w[id title product_price_id]
          csv << column_names
          @products.each do |product|
            row = [product.id, product.title, product.product_price_id]
            csv << row
          end
        end

        send_data(data, filename: 'produsts.csv')
      end
    end
  end

téléchargement csv

gem 'roo'
  resources :products do 
    collection do 
      post :import
    end
  end
  def import
    Product.import(params[:csv_file])
    redirect_to root_path
  end
class Product < ApplicationRecord
  belongs_to :product_price


  def self.import(file)
    CSV.foreach(file.path, headers: true) do |row|
      product = Product.new
      product.attributes = row.to_hash.slice(*updatable_attributes)
      product.save
    end
  end

  def self.updatable_attributes
    ["title","product_price_id"]
  end
require 'rails_helper'

RSpec.describe ProductsController, type: :controller do

  describe '#index' do
    before do
      price = ProductPrice.create(price: 2000)
      Product.create(title: "Product1", product_price_id: price.id)
    end

    it 'sortie csv' do
     get :index, format: :csv
     expect(response.body).to include "Product1"
    end

    context 'télécharger' do
      before do
        ProductPrice.create(id:1, price: 2000)
        ProductPrice.create(id:2, price: 2000)
      end
      let(:csv_file) {'test.csv'}

      subject do
        post :import, params: {
          csv_file: fixture_file_upload(csv_file, 'text/csv')
        }  
      end

      it 'aa' do
        expect{subject}.to change(Product,:count).by(2)
      end
    end
  end
end

Recommended Posts

Rails CSV Basic
Notions de base sur les rails
Principes de base du routage des rails
Principes de base de la base de données Rails
Principes de base de l'enregistreur de rails
Principes de base de Rspec [Rails]
Principes de base de Ruby on Rails
[Rails] Introduction aux principes de base du dispositif
Routes de rails de sortie en tant que csv
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation de la fonction d'exportation CSV
[Ruby on Rails] Fonction de sortie CSV
Implémenter la fonction de téléchargement CSV dans Rails
[Rails g. Erreur]
Rails Examen 1
API Rails
Migration des rails
Bases de Ruby
[Rails] first_or_initialize
rails tutry
Notions de base sur les fragments
Principes de base de JPA 1
À propos des rails 6
Principes de base de Docker
Principes de base de ViewPager
Fondation Rails
Mémorandum Rails
tutoriel sur les rails
Les bases de Java
rails tutry
tutoriel sur les rails
Les bases de Java
Rails Bases de la création d'une nouvelle application
Bases de JavaScript
[Rails] concevoir
rails tutry
Principes de base de JPA 2
tutoriel sur les rails
Les bases de Java
Conseils de rails
méthode des rails
tutoriel sur les rails
Principes de base de RecyclerView
Rails Revue 2
[Rails6 + Vue.js] Implémenter le processus d'importation CSV à l'aide d'axios
Comment sortir le CSV créé par Rails vers S3
Ruby on Rails ~ Principes de base de MVC et du routeur ~