Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将关联添加到从表单导入的CSV_Ruby On Rails_Ruby_Csv - Fatal编程技术网

Ruby on rails 将关联添加到从表单导入的CSV

Ruby on rails 将关联添加到从表单导入的CSV,ruby-on-rails,ruby,csv,Ruby On Rails,Ruby,Csv,我想在导入时将当前_user.id添加到CSV导入的每个字段中 我已成功导入CSV文件,但尝试以下操作时: 型号: def self.import(file) CSV.foreach(file.path, headers: true) do |row| product_hash = row.to_hash product = Product.find_or_create_by!(sku: product_hash['sku']) product.update_attr

我想在导入时将
当前_user.id
添加到CSV导入的每个字段中

我已成功导入CSV文件,但尝试以下操作时:

型号:

def self.import(file)
  CSV.foreach(file.path, headers: true) do |row|
    product_hash = row.to_hash
    product = Product.find_or_create_by!(sku: product_hash['sku'])
    product.update_attributes!(product_hash)
  end
end
控制器:

  def create
    user = current_user
    Product.import(params[:product][:file], user_id: user.id)
    respond_to do |format|
      format.html { redirect_to '/', notice: 'Products successfully imported.' }
    end
  end
表格:


(还尝试为用户添加隐藏字段)

错误:

ArgumentError(参数数目错误(给定2个,应为1个)):


因为我不能调用模型中的当前用户(或者,根据我的阅读,这是一个坏主意)。否则,我如何才能将当前的_user.id附加到每个CSV导入行上?

如果您的操作如此简洁,那么模型是一个很好的地方(对于更长的预处理时间,您可能会选择使用服务,但对于仅几行,模型很好)

虽然您无法访问模型中的当前用户(它是视图和控制器可用的辅助操作,因为它依赖于会话),但您几乎可以将其传递给模型,这是完全可以接受的

假设您直接上载文件(在某些托管解决方案中不允许您接受文件上载),那么如果您将其更改为同时允许文件名和用户对象,则您的方法将起作用

我将模型方法更改为:

def self.import(file:, user_id:)
  CSV.foreach(file.path, headers: true) do |row|
    product_hash = row.to_hash.merge(user: user_id)
    product = Product.find_or_create_by!(sku: product_hash['sku'])
    product.update_attributes!(product_hash)
  end
end
并将实施更改为

Product.import(file: params[:product][:file], user_id: user.id)

仅供参考,
def method_name(param:,param_2:)
表示这两个参数都是必需的。如果只需要一个参数,您可以执行
def method_name(param:,param_2:nil)
,这使得第二个参数是可选的

任何遇到此参数的人
product\u hash=row.to\u hash.merge(user\u id:user\u id
是我必须做的一个更改
Product.import(file: params[:product][:file], user_id: user.id)