如何检查Rails的ActiveStorage中的附件是否是新的?

时间:2019-05-28 19:48:22

标签: ruby-on-rails rails-activestorage

在我的Rails 5.2.2应用程序中,我正在使用Active Storage将logos附加到profiles

class Profile < ApplicationRecord

  has_many_attached :logos

end

如何在更新时将徽标附加到个人资料上?

现在,我正在检查控制器中的logos参数,该参数工作正常:

class ProfileController < ApplicationController

  def update
    if params[:profile][:logos].present?
      @profile.logo_active = true # This is the important attribute I need to set
    end
    if @profile.update(profile_params)
      flash[:success] = "Profile updated."
      redirect_to profile_path
    end
  end

end

是否可以在模型中执行相同的操作,即检查附件是否确实是新附件,然后根据需要设置logo_active属性?

我玩弄了Rails的new_record?方法,但无济于事。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我建议编写一个小型服务,该服务将为您更新个人资料并处理徽标更改。例如。像这样的东西:

# app/services/profile_updater.rb

class ProfileUpdater
  def self.call(params)
    profile = Profile.find(params.delete(:id))
    logos_was = profile.logos
    profile.assign_attributes(params)
    profile.logo_active = profile.logos != logos_was
    profile.save
  end
end

如果您更喜欢回调而不是服务,则可以按照this question

中所述为ActiveStorage模型创建回调