在创建带有文件附件的文档时,我收到一个文件夹不存在的错误?

时间:2018-02-02 06:51:30

标签: ruby-on-rails ruby ruby-on-rails-5

好吧,我有三个模型User DocumentFolder。 我使用了宝石Paperclip和Acts_as_tree。这一点是每个用户都能够创建一个带有附件的新文档。用户还可以创建文件夹,在该文件夹中,将有文档。

我遇到的问题是,当我尝试创建新文档时,我会收到错误"文件夹必须存在"。当我在一个文件夹中并且我正在创建一个新文档时,甚至会发生这种情况。我知道我在代码中遗漏了一些小东西,但我似乎无法得到它。我会展示我的代码。

文件控制器

class DocumentsController < ApplicationController

 def new
  folder = current_user.folders.find_by_id(params[:folder_id]) if params[:folder_id]
  @document = current_user.documents.build({ folder: folder })
 end

 def create
  @document = current_user.documents.new(document_params)
  if @document.save
   if @document.folder
    redirect_to @document.folder
   else
    redirect_to folders_path
   end
  else
   render :new
 end

private
 def
  @folder = current_user.folders.find_by_id(params[:document][:folder_id]) if params[:document]
  params.require(:document).permit(:upload_file, :folder_id, :user_id).merge(folder: @folder)
 end
end

文档模型

class Document < ApplicationRecord
 belongs_to :user
 belongs_to :folder

 has_attached_file :upload_file
 validates_attachment_content_type :upload_file, content_type: /.*/


end

文件表格

<%= form_for @document, html: {:multipart => true} do |f| %>
 <% @document.errors.full_messages.each do |msg| %>
  <p><%= msg %></p>
 <% end %>

 <%= f.file_field :upload_file %>
 <%= f.hidden_field :folder_id %>
<% end %>

文件夹模型

class Folder < ApplicationRecord
 belongs_to :user
 has_many :documents, :dependent => :destroy
 acts_as_tree
end

1 个答案:

答案 0 :(得分:1)

问题是belongs_to :folder这意味着在保存文档对象之前,您必须拥有folder_id

belongs_to :folder, #required: true
在rails 5 belongs_to something中的

意味着validates_presence_of :something_id

所以这里要么你应该在隐藏字段内传递folder_id表单 或者如果您在创建文档时不需要folder_id,那么请在模型optional: true中设置

belongs_to :folder, optional: true