Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 回形针不保存文件属性_Ruby On Rails_Paperclip_Nested Forms - Fatal编程技术网

Ruby on rails 回形针不保存文件属性

Ruby on rails 回形针不保存文件属性,ruby-on-rails,paperclip,nested-forms,Ruby On Rails,Paperclip,Nested Forms,我的应用程序中有一个文件模型,基本上是一个只有回形针文件的模型。我尝试使用一些嵌套表单上载一些文件,但每次保存文件模型时,实际文件都会上载,但所有回形针默认列都保持为零。以下是我正在使用的模型: class Arquivo < ActiveRecord::Base attr_accessible :arquivo, :arquivo_file_name, :arquivo_file_size, :arquivo_content_type, :arquivo_updated_at

我的应用程序中有一个文件模型,基本上是一个只有回形针文件的模型。我尝试使用一些嵌套表单上载一些文件,但每次保存文件模型时,实际文件都会上载,但所有回形针默认列都保持为零。以下是我正在使用的模型:

class Arquivo < ActiveRecord::Base

    attr_accessible :arquivo, :arquivo_file_name, :arquivo_file_size, :arquivo_content_type, :arquivo_updated_at

    has_one :aluno_documento

    attr_accessor :arquivo_file_name, :arquivo_file_size, :arquivo_content_type, :arquivo_updated_at

    has_attached_file :arquivo

    validates :arquivo_file_name, :presence => true
    validates_attachment_presence :arquivo
    validates_attachment_size :arquivo, :less_than => 1.megabyte, :if => :arquivo
    validates_attachment_content_type :arquivo, :content_type => 'application/pdf', :message => :invalid, :if => :arquivo
end
类Arquivotrue 验证附件的存在:arquivo 验证附件大小:arquivo,:小于=>1.MB,:if=>:arquivo 验证附件内容类型:arquivo,:内容类型=>'application/pdf',消息=>:invalid,:if=>:arquivo 结束 这是我用来构建Arquivo的(多层)嵌套表单的参数:

{“arquivo”=>#}

这是我在IRB中调试时发生的情况:

ar = Arquivo.new(passing params above)
    => #<Arquivo id: nil, arquivo_file_name: nil, arquivo_content_type: nil, arquivo_file_size: nil, arquivo_updated_at: nil> 
ar.arquivo_file_name
    => "SGCAv3.7.pdf"
ar.arquivo_content_type
    => "application/pdf"
ar.save
    => true
ae = Arquivo.last
    => #<Arquivo id: 9, arquivo_file_name: nil, arquivo_content_type: nil, arquivo_file_size: nil, arquivo_updated_at: nil>
ae.valid?
    => false
ae.arquivo_file_name
    => nil
ar=Arquivo.new(传递上述参数)
=> # 
ar.arquivo\u文件名
=>“SGCAv3.7.pdf”
ar.arquivo\u内容类型
=>“应用程序/pdf”
ar.save
=>正确
ae=最后一个
=> #
有效吗?
=>错误
ae.arquivo\u文件名
=>零

我看了又看,希望发现这是由愚蠢的事情引起的,但我根本不明白这是怎么发生的,尤其是在Arquivo对象被验证的部分,但所有字段都是空的

我发现了问题,实际上与回形针没有什么关系:

事实证明,我的带有回形针附件的Arquivo模型没有将回形针属性标记为“attr_accessible”。在Rails3.2中,您有一个属性的白名单,如果某个属性不在白名单上(attr_可访问),您就不能使用表单分配它(需要更多信息)。这用于保护用户手动向表单添加字段并提交超出其应提交的数据量


通常情况下,Rails会抛出一个“CannotMassAssignAttributes:attr1,attr2,…”异常,但在本例中没有。我仍然不知道是因为回形针忽略了这个错误,还是因为嵌套水平,或者两者兼而有之。只需将回形针属性添加到白名单中就行了。

我发现了问题,实际上与回形针没有什么关系:

事实证明,我的带有回形针附件的Arquivo模型没有将回形针属性标记为“attr_accessible”。在Rails3.2中,您有一个属性的白名单,如果某个属性不在白名单上(attr_可访问),您就不能使用表单分配它(需要更多信息)。这用于保护用户手动向表单添加字段并提交超出其应提交的数据量


通常情况下,Rails会抛出一个“CannotMassAssignAttributes:attr1,attr2,…”异常,但在本例中没有。我仍然不知道是因为回形针忽略了这个错误,还是因为嵌套水平,或者两者兼而有之。只需将回形针属性添加到白名单中就行了。

控制器中发生了什么?我只需为模型构建表单并保存它。除了文件:
@pessoa=pessoa.new params[:pessoa]
@pessoa.save
之外,所有的东西都被完美地创建了,而我在这个问题上提出的文件参数实际上就是我使用这个文件得到的
:arquivo\u属性
参数:[:alunos\u属性][“0”[:aluno\u文档属性][“0”][:arquivo_属性]。这可能与此处的嵌套级别有关?此处我不确定,但如果您使用嵌套表单/属性,则可能值得一试。您必须在控制器中构建它们。我假设您有其他模型连接在一起,以组成参数:pessoa?可能是:pessoa.arquivo.build在您的新操作中您的C中发生了什么OnController?我只是为模型构建表单并保存它。除了文件:
@pessoa=pessoa.new params[:pessoa]
然后
@pessoa.save
之外,所有的东西都被完美地创建了,而我在这个问题上输入的文件参数实际上就是我使用这个:
params[:pessoa]得到的
:arquivo\u属性
参数[:alunos_属性][“0”][:aluno_documentos_属性][“0”][:arquivo_属性]
。这可能与此处的嵌套级别有关?此处我不确定,但如果您使用嵌套表单/属性,则可能值得一试。您必须在控制器中构建它们。我假设您有其他模型连接在一起,以组成参数:pessoa?在新操作中可能是:pessoa.arquivo.build