2

SO上有许多类似的问题/答案,但似乎没有一个能解决我的问题。

我的目标是使用 Paperclip 为图像生成“动态水印”(用户头像覆盖在另一个图像上)。我遇到的问题是我无法获取模型的“user_id”属性,以便能够使用动态处理器获取头像文件/url。请注意,我使用的是“watermark.rb”处理器(在互联网的其他地方可以找到)。我可以成功生成静态水印,但 attachment.instance 为零。请参见:

class NicerImage < ActiveRecord::Base
   attr_accessible :content, :image, :user_id
   belongs_to :user
   has_attached_file :image,
                     :styles => lambda { |attachment| {
                      :large => {
                          :processors => [:watermark],
                          :geometry => "800>",
                          :watermark_path => User.find(attachment.instance.user_id).avatar.url(:medium),
                          :position => 'SouthEast'
                      }
                     }
                    },
                    :storage => :s3,
                    :s3_credentials => "#{Rails.root}/config/aws.yml",
                    :bucket => Rails.configuration.s3[:general_bucket],
                    :convert_options => { :all => "-auto-orient" }
end

我得到的错误是 nil:NilClass 的未定义方法 `user_id=' (因为 attachment.instance 为 nil)

谢谢!

4

1 回答 1

0

我通过检查是否 avatar_file_name.blank? 解决了我的问题。

class NicerImage < ActiveRecord::Base
 attr_accessible :content, :image, :user_id
 belongs_to :user
 has_attached_file :image,
                 :styles => lambda { |attachment| {
                  :large => {
                      :processors => [:watermark],
                      :geometry => "800>",
                      :watermark_path => User.find(attachment.instance.user_id).avatar_file_name.blank? ? nil : User.find(attachment.instance.user_id).avatar.url(:medium),
                      :position => 'SouthEast'
                  }
                 }
                },
                :storage => :s3,
                :s3_credentials => "#{Rails.root}/config/aws.yml",
                :bucket => Rails.configuration.s3[:general_bucket],
                :convert_options => { :all => "-auto-orient" }
end
于 2014-05-23T19:21:29.190 回答