【发布时间】:2014-05-17 02:53:51
【问题描述】:
我正在使用 rails 4。我遵循 Railscast 教程并选择了文件,但是当我导入时,我在 /employees/import 处收到此错误 ActiveRecord::RecordNotFound 找不到没有 ID 的员工
宝石袋
路由文件
resources :employees do
collection { post :import }
end
型号
class Employee < ActiveRecord::Base
def self.import(file)
allowed_attributes = ["identifier","first_name","last_name","address","phone"]
spreadsheet = open_spreadsheet(file)
header = spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header, spreadsheet.row(i)].transpose]
employee = Employee.where(id: employee_hash["id"]) || new
employee.attributes = row.to_hash.select { |k,v| allowed_attributes.include? k }
employee.save!
if employee.count == 1
employee.first.update_attributes(employee_hash)
else
Employee.create!(employee_hash)
end # end if !product.nil?
end # end self.import(file)
end # end class
def self.open_spreadsheet(file)
case File.extname(file.original_filename)
when ".csv" then Roo::Csv.new(file.path, :ignore)
when ".xls" then Roo::Excel.new(file.path, nil, :ignore)
when ".xlsx" then Roo::Excelx.new(file.path, nil, :ignore)
else raise "Unknown file type: #{file.original_filename}"
end
end
end
员工控制器
class EmployeesController < ApplicationController
before_action :set_employee, only: [:show, :edit, :update, :destroy, :import]
# GET /employees
# GET /employees.json
def index
@employee = Employee.where(:status => true)
@turnover_employee = Employee.where(:status => false)
respond_to do |format|
format.html
format.csv { send_data @employee.to_csv}
format.xls #{ send_data @employee.to_csv(col_sep: "\t") } /// Alternativa ///
end
end
def import
Product.import(params[:file,:id])
redirect_to root_url, notice: "Products imported."
end
private
# Use callbacks to share common setup or constraints between actions.
def set_employee
@employee = Employee.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def employee_params
params.require(:employee).permit(:identifier, :first_name, :last_name, :address, :phone, :status, :service_company_id)
end
end
进口索引表
<%= form_tag import_employees_path, multipart: true do %>
<%= file_field_tag :file, :class=> "btn icon-upload" %> |
<%= submit_tag "Importar", :class=> "btn icon-upload" %>
<% end %>
【问题讨论】:
标签: ruby-on-rails ruby excel csv