获取Ruby on Rails 4模型以接受上传的文件作为参数

时间:2013-11-16 03:07:05

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

我对Rails 4比较陌生。我认为在一个模型的控制器中得到了params.require方法,它决定了它将采取什么参数,但是现在我完全被难倒了。

这是一个Ruby on Rails Web应用程序,我需要有一个模型 - 一个'联系人'有很多上传的文件。我将上传的文件模型称为'related_document。'

我的联系人模型包括以下内容:

class Contact < ActiveRecord::Base
  has_many :related_documents, :dependent => :destroy
end

My RelatedDocuments模型包括:

class RelatedDocument < ActiveRecord::Base
  belongs_to :contact          
  has_attached_file :document  

  validates_attachment_presence :document
end   

My RelatedDocumentsController包含以下内容:

def related_document_params
  params.require(:related_document).permit(:contact_id, :document_file_name, :document_content_type, :document_file_size, :document_updated_at)
end

我的联系人控制器在上传文件时调用以下函数。如果是这样,params [:related_document]恰好包含两个参数:'contact_id' - 它所属的联系人的id;和'document' - 这是一个ActiveModel :: ForbiddenAttributesError,它是一个ActionDisplatch :: http:UploadedFile对象。

def file_upload
    @related_doc = RelatedDocument.new(params[:related_document])
end

这是barfs的地方 - 它给了我一个ActiveModel :: ForbiddenAttributesError。我不明白为什么 - 因为我在relatedDocumentsController的params.require中包含了contact_id和文档。

任何建议都将不胜感激。

提前致谢, 添

1 个答案:

答案 0 :(得分:1)

问题是您没有允许document属性。试试这个:

def related_document_params
  params.require(:related_document).permit(:contact_id, :document_file_name, :document_content_type, :document_file_size, :document_updated_at, :document)
end

注意允许参数末尾的:document