通过CSV将html上传到Rails应用程序

时间:2014-08-12 07:00:23

标签: ruby-on-rails csv

我有一个市场应用程序,允许用户上传带有产品列表的csv文件。其中一个字段是描述字段。我想允许用户在csv描述字段中上传html标签,并希望rails在加载时处理html。如何包装下面的描述字段来做到这一点?

有没有办法可以限制哪些标签可以使用?我只想允许基本的格式化标签。

我的导入方法如下:

require 'csv'
require 'open-uri'

def self.import(file, userid)
    CSV.foreach(file.path, headers: true, skip_blanks: true) do |row|

      listing_hash = {:name => row['Product title'], :description => row['Description'], :sku => row['Product_id'],
                      :price => row['Price'], :category => row['Category'], :inventory => row['Quantity in stock'],
                      :userid => userid}.tap do |list_hash|
                        list_hash[:image] = URI.parse(row['Image']) if row['Image']
                        list_hash[:image2] = URI.parse(row['Image2']) if row['Image2'] 
                        list_hash[:image3] = URI.parse(row['Image3']) if row['Image3'] 
                        list_hash[:image4] = URI.parse(row['Image4']) if row['Image4'] 
                            end

      listing = Listing.where(sku: listing_hash[:sku], userid: listing_hash[:userid]) 

      if listing.count == 1 
        listing.first.update_attributes(listing_hash)
      else
        Listing.create!(listing_hash)
      end


    end # end CSV.foreach
end # end self.import(file)

1 个答案:

答案 0 :(得分:1)

最简单的方法是清理描述,以确保只接受安全的标签和属性。

sanitize(row['Description'])

如果你想自己指定标签,你也可以这样做。

sanitize(row['Description'], tags: %w(p h1), attributes: %w(id class))

查看the rails sanitize helper文档以获取更多选项。

或者,如果您不在rails应用程序之外或无法访问视图帮助程序,则可以使用rails-html-sanitizer gem。文档非常简单。