Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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 轨道4.2.6+;多态性+;Carrierwave 0.10+;条件_Ruby On Rails_Polymorphism_Carrierwave - Fatal编程技术网

Ruby on rails 轨道4.2.6+;多态性+;Carrierwave 0.10+;条件

Ruby on rails 轨道4.2.6+;多态性+;Carrierwave 0.10+;条件,ruby-on-rails,polymorphism,carrierwave,Ruby On Rails,Polymorphism,Carrierwave,我有图片模型,它存储整个应用程序中的图片,在imageable列中我存储图片所有者对象。我希望能够以不同的分辨率保存这些图片 class Picture < AbstractModel belongs_to :imageable, polymorphic: true mount_uploader :image, ImageUploader end class User < AbstractModel has_one :picture, class_name: Pictu

我有图片模型,它存储整个应用程序中的图片,在imageable列中我存储图片所有者对象。我希望能够以不同的分辨率保存这些图片

class Picture < AbstractModel
  belongs_to :imageable, polymorphic: true
  mount_uploader :image, ImageUploader
end

class User < AbstractModel
  has_one :picture, class_name: Picture, as: :imageable, dependent: :destroy
  accepts_nested_attributes_for :picture
end

class Event < AbstractModel
  has_one :picture, class_name: Picture, as: :imageable, dependent: :destroy
  accepts_nested_attributes_for :picture
end
以下是用户方法的
模型的状态

[5] pry(#<ImageUploader>)> ap model
Изображение для  {
                :id => nil,
             :image => #<ImageUploader:0x005583dee8f938 @model=#<Picture id: nil, image: nil, imageable_id: nil, imageable_type: nil, created_at: nil, updated_at: nil>, @mounted_as=:image, @cache_id="1463023347-21567-5096", @filename="rootp_HE_pause-20160113_141810.jpg", @original_filename="rootp_HE_pause-20160113_141810.jpg", @file=#<CarrierWave::SanitizedFile:0x005583dee8cf30 @file="/home/kvokka/proj/volunteers/public/uploads/tmp/1463023347-21567-5096/rootp_HE_pause-20160113_141810.jpg", @original_filename=nil, @content_type="image/jpeg">, @versions={:mini=>#<ImageUploader::Uploader47012442238420:0x005583dee724a0 @model=#<Picture id: nil, image: nil, imageable_id: nil, imageable_type: nil, created_at: nil, updated_at: nil>, @mounted_as=:image>, :xs=>#<ImageUploader::Uploader47012435752020:0x005583dee72450 @model=#<Picture id: nil, image: nil, imageable_id: nil, imageable_type: nil, created_at: nil, updated_at: nil>, @mounted_as=:image>, :avatar=>#<ImageUploader::Uploader47012437005860:0x005583dee72428 @model=#<Picture id: nil, image: nil, imageable_id: nil, imageable_type: nil, created_at: nil, updated_at: nil>, @mounted_as=:image>}>,
      :imageable_id => nil,
    :imageable_type => nil,
        :created_at => nil,
        :updated_at => nil
更新4

当我在回调方法中使用pry运行时,就会发生这种情况

class ImageUploader < CarrierWave::Uploader::Base
  version :avatar, if: :for_user? do
    puts 'This line never run'
    process resize_to_fit: [360, 360]
  end

  private

    def for_user?(picture)
      binding.pry
      model.imageable.is_a? User
    end
问题仍然悬而未决

我怎样才能在这里找到图片所有者模型

假设您在说“picture owner model”时引用的是用户记录,那么您可以执行以下操作

class ImageUploader < CarrierWave::Uploader::Base
  ...
  def for_user?(picture)
    user = model.imageable
    user.is_a? User
    # => true
  end
  ...
end
更新

看起来
的逆\u不适用于多态关联(和)

反向支撑有一些限制:

  • 他们不与:通过协会工作
  • 它们不适用于:多态关联
  • 它们不与:作为关联
  • 对于属于关联的,有许多反向关联被忽略

另外,这可能很棘手。如果以后有时间,我将尝试重现该问题。

谢谢,但这没有帮助。我已经更新了问题并添加了一些细节,因此,它可能会有用。您的想法将只用于更新图像,对于新的,我将捕获所有版本。谢谢。我成功了:图片和:图片。语法错误。它使用::imageable的逆函数运行,但结果是一样的。我只想验证一件事。您确定关联的可成像记录已在控制器中“生成”吗?您可以在
def create
内执行以下操作进行检查:
@picture=picture.new(picture\u参数);puts ap@picture.imageable
您能告诉我
将输出放在什么位置,并确保此可成像对象是从嵌套参数中“构建”的吗?如果
@picture.imageable
没有“构建”,您可以先尝试它是否可以工作。这很奇怪,但它可以工作,但不能同时工作。我已经回答了这个问题。正如我所认为的,相反的观点是,在这里它是有效的。
class ImageUploader < CarrierWave::Uploader::Base
  version :xs do
    process resize_to_fit: [100, 100]
  end

  version :avatar, if: :for_user? do
    process resize_to_fit: [360, 360]
  end

  private

    def for_user?(_)
      model.imageable.is_a? User
    end
end
[43] pry(main)> ap v = VolunteerCenter.create(title: 'tst', address:'tst', city: City.first, phone:'123456',email: 'mm@mm.ru', description: 'ololo', link: 'http://ddd.ru', picture: (Picture.new( remote_image_url: 'https://retina.news.mail.ru/prev780x440/pic/e5/35/image25749462_adfc024a9b54b718c1a755445661b099.jpg')))
  City Load (0.8ms)  SELECT  "cities".* FROM "cities"  ORDER BY "cities"."id" ASC LIMIT 1
   (0.2ms)  BEGIN
  SQL (0.4ms)  INSERT INTO "volunteer_centers" ("title", "address", "city_id", "phone", "email", "description", "link", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id"  [["title", "tst"], ["address", "tst"], ["city_id", 1], ["phone", "123456"], ["email", "mm@mm.ru"], ["description", "ololo"], ["link", "http://ddd.ru"], ["created_at", "2016-05-12 12:13:44.417945"], ["updated_at", "2016-05-12 12:13:44.417945"]]
  SQL (0.3ms)  INSERT INTO "pictures" ("image", "imageable_type", "imageable_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["image", "image25749462_adfc024a9b54b718c1a755445661b099.jpg"], ["imageable_type", "VolunteerCenter"], ["imageable_id", 11], ["created_at", "2016-05-12 12:13:44.421458"], ["updated_at", "2016-05-12 12:13:44.421458"]]
   (2.2ms)  COMMIT
tst {
             :id => 11,
          :title => "tst",
     :created_at => Thu, 12 May 2016 12:13:44 UTC +00:00,
     :updated_at => Thu, 12 May 2016 12:13:44 UTC +00:00,
        :address => "tst",
        :city_id => 1,
          :phone => "123456",
          :email => "mm@mm.ru",
    :description => "ololo",
        :vk_link => nil,
           :link => "http://ddd.ru"
}
=> nil
[44] pry(main)> ap v.picture
  VolunteerCenter Load (0.6ms)  SELECT  "volunteer_centers".* FROM "volunteer_centers" WHERE "volunteer_centers"."id" = $1 LIMIT 1  [["id", 11]]
Изображение для tst {
                :id => 120,
             :image => #<ImageUploader:0x0055596544d928 @model=#<Picture id: 120, image: "image25749462_adfc024a9b54b718c1a755445661b099.jpg", imageable_id: 11, imageable_type: "VolunteerCenter", created_at: "2016-05-12 12:13:44", updated_at: "2016-05-12 12:13:44">, @mounted_as=:image, @cache_id=nil, @filename="image25749462_adfc024a9b54b718c1a755445661b099.jpg", @original_filename="image25749462_adfc024a9b54b718c1a755445661b099.jpg", @file=#<CarrierWave::SanitizedFile:0x00555963f0c690 @file="/home/kvokka/proj/volunteers/public/uploads/picture/image/120/image25749462_adfc024a9b54b718c1a755445661b099.jpg", @original_filename=nil, @content_type="image/jpeg">, @versions={:mini=>#<ImageUploader::Uploader46921211280280:0x00555966c55890 @model=#<Picture id: 120, image: "image25749462_adfc024a9b54b718c1a755445661b099.jpg", imageable_id: 11, imageable_type: "VolunteerCenter", created_at: "2016-05-12 12:13:44", updated_at: "2016-05-12 12:13:44">, @mounted_as=:image, @parent_cache_id="1463055224-8966-4735", @cache_id=nil, @filename="image25749462_adfc024a9b54b718c1a755445661b099.jpg", @original_filename="image25749462_adfc024a9b54b718c1a755445661b099.jpg", @file=#<CarrierWave::SanitizedFile:0x00555966e89620 @file="/home/kvokka/proj/volunteers/public/uploads/picture/image/120/mini_image25749462_adfc024a9b54b718c1a755445661b099.jpg", @original_filename=nil, @content_type="image/jpeg">, @versions={}, @storage=#<CarrierWave::Storage::File:0x00555966e8a4a8 @uploader=#<ImageUploader::Uploader46921211280280:0x00555966c55890 ...>>>, :xs=>#<ImageUploader::Uploader46921211274220:0x00555966c55868 @model=#<Picture id: 120, image: "image25749462_adfc024a9b54b718c1a755445661b099.jpg", imageable_id: 11, imageable_type: "VolunteerCenter", created_at: "2016-05-12 12:13:44", updated_at: "2016-05-12 12:13:44">, @mounted_as=:image, @parent_cache_id="1463055224-8966-4735", @cache_id=nil, @filename="image25749462_adfc024a9b54b718c1a755445661b099.jpg", @original_filename="image25749462_adfc024a9b54b718c1a755445661b099.jpg", @file=#<CarrierWave::SanitizedFile:0x005559659d60c0 @file="/home/kvokka/proj/volunteers/public/uploads/picture/image/120/xs_image25749462_adfc024a9b54b718c1a755445661b099.jpg", @original_filename=nil, @content_type="image/jpeg">, @versions={}, @storage=#<CarrierWave::Storage::File:0x005559659d7010 @uploader=#<ImageUploader::Uploader46921211274220:0x00555966c55868 ...>>>, :avatar==>#<ImageUploader::Uploader46921211257860:0x00555966c55840 @model=#<Picture id: 120, image: "image25749462_adfc024a9b54b718c1a755445661b099.jpg", imageable_id: 11, imageable_type: "VolunteerCenter", created_at: "2016-05-12 12:13:44", updated_at: "2016-05-12 12:13:44">, @mounted_as=:image, @parent_cache_id="1463055224-8966-4735", @cache_id=nil, @filename="image25749462_adfc024a9b54b718c1a755445661b099.jpg", @original_filename="image25749462_adfc024a9b54b718c1a755445661b099.jpg", @file=#<CarrierWave::SanitizedFile:0x00555963379328 @file="/home/kvokka/proj/volunteers/public/uploads/picture/image/120/avatar=_image25749462_adfc024a9b54b718c1a755445661b099.jpg", @original_filename=nil, @content_type="image/jpeg">, @versions={}, @storage=#<CarrierWave::Storage::File:0x0055596337a390 @uploader=#<ImageUploader::Uploader46921211257860:0x00555966c55840 ...>>>}, @storage=#<CarrierWave::Storage::File:0x00555965d85fb8 @uploader=#<ImageUploader:0x0055596544d928 ...>>>,
      :imageable_id => 11,
    :imageable_type => "VolunteerCenter",
        :created_at => Thu, 12 May 2016 12:13:44 UTC +00:00,
        :updated_at => Thu, 12 May 2016 12:13:44 UTC +00:00
}
class ImageUploader < CarrierWave::Uploader::Base
  version :avatar, if: :for_user? do
    puts 'This line never run'
    process resize_to_fit: [360, 360]
  end

  private

    def for_user?(picture)
      binding.pry
      model.imageable.is_a? User
    end
[46] pry(main)> ap u = User.create(email: 'example@test.com', password: '123456', password_confirmation: '123456', picture: (Picture.create remote_image_url: 'http://onrails.club/uploads/default/29/31f7627609164af8.png'))

From: /home/kvokka/proj/volunteers/app/uploaders/image_uploader.rb @ line 68 ImageUploader#for_user?:

    66: def for_user?(_)
    67:   binding.pry
 => 68:   model.imageable.is_a? User
    69: end

@cache_id                "1463060913-8966-3349"
@file                    #<CarrierWave::SanitizedFile:0x00555963268330 @file="/hom...
@filename                "31f7627609164af8.png"
@model                   #<Picture id: nil, image: nil, imageable_id: nil, imageab...
@mounted_as              :image
@original_filename       "31f7627609164af8.png"
@versions                {:mini=>#<ImageUploader::Uploader46921199022860:0x0055596...
[1] pry(#<ImageUploader>)> 

From: /home/kvokka/proj/volunteers/app/uploaders/image_uploader.rb @ line 68 ImageUploader#for_user?:

    66: def for_user?(_)
    67:   binding.pry
 => 68:   model.imageable.is_a? User
    69: end

@cache_id                "1463060913-8966-3349"
@file                    #<CarrierWave::SanitizedFile:0x00555963268330 @file="/hom...
@filename                "31f7627609164af8.png"
@model                   #<Picture id: nil, image: nil, imageable_id: nil, imageab...
@mounted_as              :image
@original_filename       "31f7627609164af8.png"
@versions                {:mini=>#<ImageUploader::Uploader46921199022860:0x0055596...
[1] pry(#<ImageUploader>)> 
   (0.3ms)  BEGIN
  SQL (0.7ms)  INSERT INTO "pictures" ("image", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id"  [["image", "31f7627609164af8.png"], ["created_at", "2016-05-12 13:48:40.071387"], ["updated_at", "2016-05-12 13:48:40.071387"]]

From: /home/kvokka/proj/volunteers/app/uploaders/image_uploader.rb @ line 68 ImageUploader#for_user?:

    66: def for_user?(_)
    67:   binding.pry
 => 68:   model.imageable.is_a? User
    69: end

@cache_id                nil
@file                    #<CarrierWave::SanitizedFile:0x005559639c6348 @file="/hom...
@filename                "31f7627609164af8.png"
@model                   #<Picture id: 112, image: "31f7627609164af8.png", imageab...
@mounted_as              :image
@original_filename       "31f7627609164af8.png"
@storage                 #<CarrierWave::Storage::File:0x00555963b5add0 @uploader=#...
@versions                {:mini=>#<ImageUploader::Uploader46921199022860:0x0055596...
[1] pry(#<ImageUploader>)> 
   (2.9ms)  COMMIT
   (0.2ms)  BEGIN
  User Exists (0.7ms)  SELECT  1 AS one FROM "users" WHERE "users"."email" = 'example@test.com' LIMIT 1
  SQL (0.4ms)  INSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["email", "example@test.com"], ["encrypted_password", "$2a$11$qq8tVgzISJguKz7oVJWyVO45vW/ujSEsi/ow29w78nC9ByOdjrPYK"], ["created_at", "2016-05-12 13:48:41.761836"], ["updated_at", "2016-05-12 13:48:41.761836"]]
  SQL (0.4ms)  UPDATE "pictures" SET "imageable_type" = $1, "imageable_id" = $2, "updated_at" = $3 WHERE "pictures"."id" = $4  [["imageable_type", "User"], ["imageable_id", 31], ["updated_at", "2016-05-12 13:48:41.764681"], ["id", 112]]
   (2.7ms)  COMMIT
 ,  {
                           :id => 31,
                        :email => "example@test.com",
           :encrypted_password => "$2a$11$qq8tVgzISJguKz7oVJWyVO45vW/ujSEsi/ow29w78nC9ByOdjrPYK",
         :reset_password_token => nil,
       :reset_password_sent_at => nil,
          :remember_created_at => nil,
                :sign_in_count => 0,
           :current_sign_in_at => nil,
              :last_sign_in_at => nil,
           :current_sign_in_ip => nil,
              :last_sign_in_ip => nil,
                   :created_at => Thu, 12 May 2016 13:48:41 UTC +00:00,
                   :updated_at => Thu, 12 May 2016 13:48:41 UTC +00:00,
                         :name => nil,
                      :surname => nil,
                        :phone => nil,
                          :dob => nil,
                       :gender => nil,
                       :height => nil,
                        :about => nil,
        :information_source_id => nil,
               :institution_id => nil,
              :clothes_size_id => nil,
                      :city_id => nil,
          :volunteer_center_id => nil,
                     :blood_id => nil,
               :vkontakte_link => nil,
    :medical_contraindications => nil
}
=> nil
class ImageUploader < CarrierWave::Uploader::Base
  ...
  def for_user?(picture)
    user = model.imageable
    user.is_a? User
    # => true
  end
  ...
end
class Picture < AbstractModel
  belongs_to :imageable, polymorphic: true, inverse_of: :picture # WITHOUT s