如何在Rails中从导入的文件创建新帖子?

时间:2015-06-06 22:42:14

标签: ruby-on-rails ruby ruby-on-rails-4

我使用Markio Gem解析了一个Netscape书签文件,我试图将文件中的书签导入我的名为Bookmark的模型中。

当我导入文件时,我没有收到任何错误。它告诉我书签已经导入,但它没有显示出来。

如何从使用Markio解析的文件中正确创建书签?

My Bookmark字段是title和href,与Markio所说的相符。

模型

def self.import(file)
    Markio.parse(file.path) do |bookmark|
        Bookmark.create(title: bookmark.title, href: bookmark.href)  
    end 
end 

控制器

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

查看

<%= form_tag import_bookmarks_path, multipart: true do %>
  <%= file_field_tag :file %>
  <%= submit_tag "Import" %>
<% end %>

我正在尝试导入的书签文件

<!DOCTYPE NETSCAPE-Bookmark-file-1>
<DL>
  <p>
    <DT><A HREF="http://www.google.com/">Google</A>
    <DT><A HREF="http://www.youtube.com/">Youtube</A>
  </p>
</DL>


修改 不太确定发生什么事情显然Markio并没有解析像它应该说的那样。这是导轨控制台在导入文件时所说的内容。它并没有像它所说的那样返回一系列书签。这就是它所做的一切,然后重定向到我的root_url。

Parameters: {"utf8"=>"✓", "authenticity_token"=>
"DAAu8486RreHqnFgUbDnh3/LfQcyvQxRLtqVqFAiQHNWgpZvhZgMBki5bY3IFIWwV
/m8aAGQ6FJywqvjuobB7w==", "file"=>#
<ActionDispatch::Http::UploadedFile:0x007ffe0434af58 @tempfile=#  
<Tempfile:/tmp/RackMultipart20150608-26033-vs4o71.html>,
@original_filename="bookmarks_6_6_15.html", @content_type="text/html",    
@headers="Content-Disposition: form-data; name=\"file\"; 
filename=\"bookmarks_6_6_15.html\"\r\nContent-Type: text/html\r\n">,   
"commit"=>"Import"}

1 个答案:

答案 0 :(得分:0)

正如我在评论中指出的,Markio::parse返回一个数组。 您将不得不迭代元素并为每个元素创建Bookmark

def self.import(file)
  Markio.parse(file.path).each do |bookmark|
    Bookmark.create(title: bookmark.title, href: bookmark.href)
  end
end

不是我在第2行添加的.each