【问题标题】:Default attachment when has_one_attachedhas_one_attached 时的默认附件
【发布时间】:2018-03-30 10:06:28
【问题描述】:

我有一个带有has_one_attached :avatar 的用户模型,使用ActiveStorage。 Avatar 是可选的,但是当它不存在时,我想显示一个默认值。我将所有附件都存储在 Amazon S3 上,并且更喜欢将默认附件存储在那里。

如果我也能够在默认头像上使用变体方法,我会更喜欢。

user.avatar.variant(resize: "100x100")

关于如何实现这一点的任何建议?我可以创建某种未链接到任何特定记录的默认附件并在头像不存在时使用它吗?

【问题讨论】:

    标签: ruby-on-rails amazon-s3 rails-activestorage


    【解决方案1】:

    不附加默认图像,只需检查是否附加了图像,如果没有,则显示默认图像。 present? 方法在这种情况下不起作用,请改用attached?

    def display_avatar(user)
      if user.avatar.attached?
        user.avatar
      else
        'default.png'
      end
    end
    

    【讨论】:

    • 该解决方案的问题是我无法访问变体并且它没有存储在 S3 上(这可能是硬编码的)
    • 只需访问视图中的变体方法即可。我不会在 S3 上存储默认值,只是将其作为资产包含。
    【解决方案2】:

    有两种方法,

    1. 默认

    在模型中使用这个,(假设你使用的是回形针 gem)

    :default_url => "/assets/:style/missing.jpeg"

    2.手动

    你必须添加如下的辅助方法,

      def avatar_check user
          if user.avatar.image.present?
            image_tag user.image_url :thumb
          else
            image_tag 'default.jpg'
          end
        end
    

    将您的 default.jpg 保存在资产中。

    在下面的视图调用中,

    User.all.each do |u|
    = avatar_check u
    

    我不确定是否有变体

    【讨论】:

    • 我没有使用papercip,所以很遗憾第一种方法不可行。第二种方法也不起作用,因为它不适用于variant,而且我正在创建一个 API,所以 image_tag 不可用。使用 ActiveStorage。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多