我对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和文档。
任何建议都将不胜感激。
提前致谢, 添
答案 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
。