Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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 未定义的方法“[]';对于#<;ActionDispatch::Http::UploadedFile_Ruby On Rails_Ruby_Heroku - Fatal编程技术网

Ruby on rails 未定义的方法“[]';对于#<;ActionDispatch::Http::UploadedFile

Ruby on rails 未定义的方法“[]';对于#<;ActionDispatch::Http::UploadedFile,ruby-on-rails,ruby,heroku,Ruby On Rails,Ruby,Heroku,我对Rails非常陌生,我真的很困惑我在做什么,很抱歉这里遗漏了一些基本知识 这没有帮助 正在尝试通过API将文件从iOS客户端应用程序上载到Heroku上托管的my rails应用程序。使用form.file\u字段上传时,回形针gem安装和文件上传效果非常好。但不是来自API undefined method `[]' for #<ActionDispatch::Http::UploadedFile #e的未定义方法“[]” Rails.logger.error“#{e.messag

我对Rails非常陌生,我真的很困惑我在做什么,很抱歉这里遗漏了一些基本知识

这没有帮助

正在尝试通过API将文件从iOS客户端应用程序上载到Heroku上托管的my rails应用程序。使用form.file\u字段上传时,回形针gem安装和文件上传效果非常好。但不是来自API

undefined method `[]' for #<ActionDispatch::Http::UploadedFile
#e的
未定义方法“[]”
Rails.logger.error“#{e.message}”
结束
确保
清理临时文件
foo=foo.find(参数[:id])
阿福
如果!foo.update_属性(update_参数)
返回api_错误(状态:422,错误:foo.errors)
结束
呈现json:result.to_json
结束
def解析文件数据(文件数据)
@tempfile=tempfile.new('item\u foo\u file')
@tempfile.binmode
@tempfile.write Base64.decode64(foo_file_data.read)
@tempfile.rewind
uploaded_file=ActionDispatch::Http::UploadedFile.new(
tempfile:@tempfile,
原始\u文件名:foo\u文件\u数据。原始\u文件名
)
上传的\u file.content\u type=foo\u file\u data.content\u type
上传的文件
结束
def clean_tempfile
如果@tempfile
@tempfile.close
@tempfile.unlink
结束
结束
def更新参数
参数要求(:app).permit(
:name,:user\u id,:foo\u文件
)
结束
结束
最后,我将非常感谢您在上传此文件并将其附加到foo对象的foo_file参数时提供的任何帮助。我认为这与我指出的未定义的方法错误有关。或者我可能完全偏离了方向。谢谢你的时间和帮助

编辑:

新服务器日志

Started PUT "/api/v1/foos/1

Processing by Foo::V1::FoosController#update as JSON

Parameters: 
{"foo"=>{"name"=>"newnameB"}, "foo_file"=>#<ActionDispatch::Http::UploadedFile:0x007fac81c82168 @tempfile=#<Tempfile:/tmp/RackMultipart20160523-6-q6pyac.xml>, @original_filename="Main.xml", @content_type="multipart/form-data", @headers="Content-Disposition: form-data; name=\"foo_file\"; filename=\"Main.xml\"\r\nContent-Type: multipart/form-data\r\n">, "id"=>"1"}

undefined method `gsub' for nil:NilClass

Completed 200 OK in 25ms (Views: 0.4ms | ActiveRecord: 3.6ms)
start PUT”/api/v1/foos/1
由Foo::V1::FoosController处理#更新为JSON
参数:
{“foo”=>{“name”=>“newnameB”},“foo_文件”=>,“id”=>“1”}
nil:NilClass的未定义方法“gsub”
在25ms内完成200 OK(视图:0.4ms |活动记录:3.6ms)

更新
的开头附近,在这一行:

params[:foo_file] = parse_foo_file_data(params[:foo_file]) if params[:foo_file]
调用
pase\u foo\u file\u数据(params[:foo\u file])
。可以查看日志
params[:foo\u file]
是否是
ActionDispatch::Http::UploadedFile
对象

下面,
parse\u foo\u file\u data
的定义如下:

def parse_foo_file_data(foo_file_data)
    @tempfile = Tempfile.new('item_foo_file')
    @tempfile.binmode
    @tempfile.write Base64.decode64(foo_file_data[:data])
    @tempfile.rewind
    # ... etc
第三行是
foo\u file\u data[:data]
,但是
foo\u file\u data
是一个ActionDispatch::Http::UploadedFile对象,并且

看起来您最可能要做的是从UploadedFile对象中获取数据,在这种情况下,您可能需要更多类似于
@tempfile.write Base64.decode64(foo\u file\u data.read)


当您尝试调用下一步的
foo\u file\u data[:content\u type]
时,会遇到类似的问题,这需要是
foo\u file\u data。content\u type

靠近
update
的开头,在这一行:

params[:foo_file] = parse_foo_file_data(params[:foo_file]) if params[:foo_file]
调用
pase\u foo\u file\u数据(params[:foo\u file])
。可以查看日志
params[:foo\u file]
是否是
ActionDispatch::Http::UploadedFile
对象

下面,
parse\u foo\u file\u data
的定义如下:

def parse_foo_file_data(foo_file_data)
    @tempfile = Tempfile.new('item_foo_file')
    @tempfile.binmode
    @tempfile.write Base64.decode64(foo_file_data[:data])
    @tempfile.rewind
    # ... etc
第三行是
foo\u file\u data[:data]
,但是
foo\u file\u data
是一个ActionDispatch::Http::UploadedFile对象,并且

看起来您最可能要做的是从UploadedFile对象中获取数据,在这种情况下,您可能需要更多类似于
@tempfile.write Base64.decode64(foo\u file\u data.read)


当你试图调用
foo\u file\u data[:content\u type]
再往下一点的时候,你会遇到类似的问题,那必须是
foo\u file\u data。content\u type

我想你这里有一个空格,它把它弄坏了。“:name,:user\u id,:foo\u file”应该是::name,:user\id,:foo\u file“对不起,我只是把名字错误地翻译成了‘foo’。我的实际代码中没有空格。我编辑了这篇文章。谢谢你对细节的关注。我想你这里的空间打破了它。“:name,:user_id,:foo_file”应该是“:name,:user_id,:foo_file”对不起,我只是把名字错误地翻译成了“foo”。我的实际代码中没有空格。我编辑了这篇文章。谢谢你对细节的关注。这实际上是一个很好的建议,它消除了我所犯的错误。但是文件仍然不会上传到foo对象,我得到了一个“失败”的响应。但是现在日志中有一个不同的错误。是否有人发现代码中还有其他错误?我是否应该接受这个答案,然后再次发布问题?在您粘贴的代码中没有直接调用
gsub
,因此仅从提供的信息无法判断发生了什么。您可能希望记录异常回溯,而不是(或除此之外)消息,例如
e.backtrace
。此外,我刚刚注意到,但您确实注意到,这将挽救NommoryException或SystemStackError之类的事情。你应该截获的最广泛的错误是StandardError,除非你有很好的理由。这实际上是一个很好的建议,它消除了我的错误。但是文件仍然不会上传到foo对象,我得到了一个“失败”的响应。但是现在日志中有一个不同的错误。是否有人发现代码中还有其他错误?我是否应该接受这个答案,然后再次发布问题?在您粘贴的代码中没有直接调用
gsub
,因此仅从提供的信息无法判断发生了什么。您可能希望记录异常回溯,而不是(或除此之外)消息,例如
e.backtrace
。此外,我刚刚注意到,但您确实注意到,这将挽救NommoryException或SystemStackError之类的事情。你应该截获的最广泛的错误是StandardError,除非你有很好的理由。