rails6.1.0
商品登録ページを修正してます。
商品は複数の画像を持ちます。
「carriewave」の利用をやめることになり、画像に関する部分を作り直してる所です。
商品の登録時に
・画像が、「新規か変更か削除か」判定する必要があります。
・画像に、親のid(商品id)を持たせる必要があります。
このような条件ですが
「before_save」
を使うと、まだ確定前なので「画像が新規か変更か」など子レコードの判定はできますが、商品idはまだ取得できません。
「after_save」
を使うと、確認後なので商品idは取得できますが、逆に子レコードの判定が出来なくなりました。
両方を満たしたい場合、どうする方法があるのでしょうか?
初心者につき勘違いしてる部分があったらすいません。
先輩方アドバイスいただけると幸いです。
宜しくお願い致します。
【補足】
子に親のid(商品id)を持たせたいのは、保存ディレクトリに親idを含めるためです。
\app\models\item.rb
ruby
1class Item < ApplicationRecord 2 before_save :s3_copy_image 3 4 has_many :images, dependent: :destroy 5 accepts_nested_attributes_for :images, allow_destroy: true 6 7 8 # imageが変更されたかどうか 9 def images_changed? 10 self.images.any? do |img| 11 img.new_record? || img.changed? || img.marked_for_destruction? 12 end 13 end 14 15 16 def s3_copy_image 17 18 if images_changed? 19 images.each do |img| 20 if img.new_record? 21 target_key = "uploads/image-develop/src/#{self.id}/#{File.basename(img.src)}" 22 # 以下からS3操作なので省略 23 end 24 end 25 end 26 27end
\app\models\image.rb
ruby
1class Image < ApplicationRecord 2 #mount_uploader :src, ImageUploader 3 4 belongs_to :item, optional: true 5 6 validates :src, presence: true 7end 8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/12 23:10