【问题标题】:link to asset csv file from within populate.rake从 populate.rake 链接到资产 csv 文件
【发布时间】:2014-08-22 18:08:23
【问题描述】:

我需要从 csv 文件中加载一份食物列表作为 populate.rake 的一部分。这将使我的网站开发速度更快。

我收到此错误:

NoMethodError: undefined method `path' for "./assets/food_db.csv":String

我在 populate.rake 中有这个方法

def make_foods
  Food.import("/assets/food_db.csv")        
end   

里面的food.rb

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

如何正确传递文件?

【问题讨论】:

    标签: ruby-on-rails csv ruby-on-rails-4 rake asset-pipeline


    【解决方案1】:

    你快到了!

    # food.rb
    def self.import(file_path) # you receive here the file path as a String
      CSV.foreach(file_path, headers: :true) do |row|
        self.create! row.to_hash
      end
    end
    

    应该可以。


    另外,我建议您使用文件的完整路径:

    Food.import( Rails.root.join('app', 'assets', 'food_db.csv') )
    # will be looking for a file in your application folder + `/app/assets/food_db.csv`
    # For Ubuntu users, might look like this: `/home/<your_username>/<your_app_name>/app/assets/food_db.csv`
    

    【讨论】:

    • 谢谢!我应该更仔细地阅读错误哈哈。虽然现在它仍然无法理解路径。我已经尝试了其中的一些。 Errno::ENOENT: 没有这样的文件或目录 - assets/food_db.csv
    • 好主意。我一直在寻找类似的东西。虽然它仍然找不到文件。相同的错误,但路径完整。
    • 在这种情况下,我将使用终端转到文件的文件夹,然后将路径复制粘贴到Rails.root
    • 我认为这是一个错误的路径,但这是真正的路径,它仍然不起作用:Food.import(Rails.root.join('app', 'lib', 'assets ', 'food_db.csv'))... 好吧,我也试试 :)
    • (直接在 IRB 控制台中进行测试的快速方法是使用 Dir.glob(Rails.root.join('lib', 'assets')) 并查看此目录中可用文件的列表)---哦 @ninja08 我注意到您使用了 @987654325 @ 但lib 文件夹不在app 文件夹内,请尝试以下操作:Rails.root.join('lib', 'assets', 'food_db.csv')
    猜你喜欢
    • 2012-09-04
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2012-06-07
    • 1970-01-01
    • 2018-12-21
    相关资源
    最近更新 更多