【问题标题】:Import data app ruby on heroku在heroku上导入数据应用程序ruby
【发布时间】:2014-11-14 21:15:12
【问题描述】:

我一直在尝试将数据导入到我的 ruby​​ on rails aplication 4.2,它托管在 heroku 中,数据库位于 pg 中。 我尝试了本教程,但没有成功:

http://railscasts.com/episodes/396-importing-csv-and-excel?view=asciicast 在梦想控制器中说没有方法导入。

任何人都知道将数据导入我的应用程序的好方法吗? 谢谢! 费利佩

【问题讨论】:

  • 愚蠢的问题,但是你记得把文件推送到远程吗?
  • 我的本地数据库(Mysqlite)和远程数据库(Pg)之间没有连接。我将数据从网站的另一个版本迁移到 ruby​​ on rails 中的新版本。所以我试图用 csv 来证明,开始迁移信息。不知道这是不是你的问题?我是正确的?感谢您的合作!
  • 本地实例是否与您在 Heroku 上运行的应用程序相同?您是只更改数据库还是同时更改应用程序?

标签: ruby-on-rails ruby heroku pg


【解决方案1】:

如果在dreams_controller 中没有import 方法,则表明您没有正确定义import 方法。换句话说,您要么跳过了本教程的这一部分,要么搞砸了:

/app/controllers/products_controller.rb

def import
  Product.import(params[:file])
  redirect_to root_url, notice: "Products imported."
end

如果您可以发布代码,帮助会容易得多。

【讨论】:

  • 感谢您的帮助!这是我的dreams_controller.rb:def import Dream.import(params[:file])redirect_to root,注意:“梦想导入。​​”结束结束
  • 如果你看教程,它将要导入的文件的路径作为params中的参数。 IE。 Product.import(params[:file]) 然后import 模型上的import 方法解析该文件。您将 id 作为参数传递,其值为 import,但这是行不通的。
  • 嗨,马特,谢谢!看,我正在尝试这个:private def set_dream @dream = Dream.find(params[Rails.root + "app/csv/estructura.csv"]) end 这是结果:evernote.com/shard/s447/sh/0b40a56f-e21a-4404-8046-fdd85f887460/…
  • 所以这就是交易...find 方法 always 需要一个数据库 ID 作为参数并且 always 如果在数据库中找不到具有该 ID 的模型,则会引发异常。显然,您在数据库中没有Dream 对象,其ID 具有很大的长路径名。将Dream.find(...) 更改为Dream.import(File.join(Rails.root, 'app/csv/estructura.csv')),您应该一切顺利。
  • 嗨,垫子!谢谢你的回答人!我的梦想控制器中没有 Dream.find。我按照你说的做任何方式,结果是:evernote.com/shard/s447/sh/f0d0c94f-00e7-4beb-9273-263446b67d46/…
【解决方案2】:

缺少的方法在 dream.rb model 内部。你需要这个:

def self.import(file)
  CSV.foreach(file.path, headers: true) do |row|
    Dream.create! row.to_hash
  end
end

那是因为当您调用Dream.import(params[:file]) 时,您实际上是在调用 Dream 模型的类方法。

【讨论】:

  • 这是我的dream.rb: def self.iported(file) CSV.foreach(file.path, headers: true) do ⎮row⎮ Dream.create! row.to_hash end end
  • self.iported 应该是 self.import 。这是 stackoverflow 或您的代码中的错字吗?
  • 你能再解释一下吗? :) 谢谢!我按照教程做的,我做错了什么?
  • 查看您发布的错误图像,我们可以确定您在控制器中的操作正在被调用。伟大的!但是,该错误抱怨当您在控制器中执行 Dream.import 时尝试使用的类 DREAM 的函数 IMPORT 不存在。不过,Dream.import 的定义在 dream.rb 中,所以你一定是在这个模型中复制粘贴了一些错误
猜你喜欢
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 2018-06-10
  • 2017-01-30
  • 1970-01-01
  • 2020-11-18
相关资源
最近更新 更多