Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 为什么carrierwave保存整个模型的副本?_Ruby On Rails_Ruby_Ruby On Rails 3_Carrierwave - Fatal编程技术网

Ruby on rails 为什么carrierwave保存整个模型的副本?

Ruby on rails 为什么carrierwave保存整个模型的副本?,ruby-on-rails,ruby,ruby-on-rails-3,carrierwave,Ruby On Rails,Ruby,Ruby On Rails 3,Carrierwave,我一直在使用CarrierWave与AWS永远没有问题,但在我的最新项目中,我根本无法让它工作。文件上载到AWS时不会出现任何问题,但是它不会将文件位置保存在DB表中,而是存储整个模型的副本。当页面加载时,我会收到一个错误,因为rails无法确定如何处理存储在表中的数据 看看下面。。直接从rails控制台,其中profile_picture是使用mounted to CarrierWave的字段 它看起来像是保存了整个对象,而不是生成的URL。有人对此有什么想法吗 dog = Dog.first

我一直在使用CarrierWave与AWS永远没有问题,但在我的最新项目中,我根本无法让它工作。文件上载到AWS时不会出现任何问题,但是它不会将文件位置保存在DB表中,而是存储整个模型的副本。当页面加载时,我会收到一个错误,因为rails无法确定如何处理存储在表中的数据 看看下面。。直接从rails控制台,其中profile_picture是使用mounted to CarrierWave的字段

它看起来像是保存了整个对象,而不是生成的URL。有人对此有什么想法吗

dog = Dog.first
=> #<Dog id: 2, user_id: nil, name: "Lentil", profile_picture: "971935_556519314400437_65392555_n.jpg", breed_id: 2, 
color: "fawn with black mask", age: 1, gender: "m", created_at: "2013-08-03 17:57:00", updated_at: "2013-08-03 18:12:33">

dog.profile_picture
=> #<ImageUploader:0x007f83388b70f0 @model=#<Dog id: 2, user_id: nil, name: "Lentil", profile_picture: "971935_556519314400437_65392555_n.jpg", breed_id: 2, color: "fawn with black mask", age: 1, gender: "m", created_at: "2013-08-03 17:57:00", updated_at: "2013-08-03 18:12:33">, @mounted_as=:profile_picture, @storage=#
<CarrierWave::Storage::Fog:0x007f83388b6b50 @uploader=#<ImageUploader:0x007f83388b70f0 ...>, @connection=#<Fog::Storage::AWS::Real:0x007f8336d5e3d0 @aws_access_key_id="xxx", @aws_secret_access_key="xxx", @hmac=#<Fog::HMAC:0x007f8336d5e100 @key="xxx", @digest=#<OpenSSL::Digest::Digest: xxx>, @signer=#<Proc:0x007f8336d5ddb8@/app/vendor/bundle/ruby/2.0.0/gems/fog-0.9.0/lib/fog/core/hmac.rb:22 
(lambda)>>, @endpoint=nil, @host="s3.amazonaws.com", @path="/", @port=443, @scheme="https", @connection=#<Fog::Connection:0x007f8336d5db10 @excon=#<Excon::Connection:0x007f8336d5d8b8 @connection={:headers=>{}, :host=>"s3.amazonaws.com", :mock=>nil, :path=>"/", :port=>"443", :query=>nil, :scheme=>"https"}, @socket_key="s3.amazonaws.com:443">, @persistent=true>>>, @file=#<CarrierWave::Storage::Fog::File:0x007f83388b6510 @uploader=#<ImageUploader:0x007f83388b70f0 
...>, @base=#<CarrierWave::Storage::Fog:0x007f83388b6b50 @uploader=#<ImageUploader:0x007f83388b70f0 ...>, @connection=#<Fog::Storage::AWS::Real:0x007f8336d5e3d0 @aws_access_key_id="xxx", @aws_secret_access_key="xxx", @hmac=#<Fog::HMAC:0x007f8336d5e100 @key="xxx", @digest=#<OpenSSL::Digest::Digest: xxx>, @signer=#<Proc:0x007f8336d5ddb8@/app/vendor/bundle/ruby/2.0.0/gems/fog-0.9.0/lib/fog/core/hmac.rb:22 
(lambda)>>, @endpoint=nil, @host="s3.amazonaws.com", @path="/", @port=443, @scheme="https", @connection=#<Fog::Connection:0x007f8336d5db10 @excon=#<Excon::Connection:0x007f8336d5d8b8 @connection={:headers=>{}, :host=>"s3.amazonaws.com", :mock=>nil, :path=>"/", :port=>"443", :query=>nil, :scheme=>"https"}, @socket_key="s3.amazonaws.com:443">, @persistent=true>>>, @path="uploads/dog/profile_picture/2/971935_556519314400437_65392555_n.jpg">, @versions={}>

Carrierwave在装载getter时会覆盖它,因此当您调用profile_picture时,它将返回上载器的一个实例,而不是文件URL。在实际数据库中,仅存储文件URL


有许多不同的方法可以在上传程序上调用。最常见的是url。在使用gem之前,您应该阅读Github上的Carrierwave文档,以避免进一步混淆。

gem有问题。。重新安装后,一切正常。

此外,我在AWS密钥和密码的位置放了一个“xxx”。。它们在我的机器上不是“xxx”.谢谢您直接从数据库中选择并显示存储的实际数据?当然。。原始数据为971011_588387701213598_486895615_n.jpg。查询是从name='lentl'的狗中选择*;Fog gem似乎没有正确地在文件名前面加上URL路径。。我已经尝试了多种配置变体,但都无效。我已经阅读了文档。。调用url提供了相同的数据,因此引发了一个错误。您可以让我们知道url方法上出现了什么错误,但让我告诉您,您关于存储整个记录的假设是不真实的,因为您已经根据数据库和@LoganSerman检查了它,所以它是正确的,因为carrierwave定义的重写方法是您在dog.profile\u图片上看到该对象的原因