У меня есть приложение Rails (4), и я использую несущую для загрузки изображения в ведро S3 на производстве (и локальное в dev). Это все работает, но я хотел реорганизовать свой код.метод рефакторирования метод multi mount_uploader для несущей волны
Моя модель:
class Blogging < ActiveRecord::Base
mount_uploader :picture1, Picture1Uploader
mount_uploader :picture2, Picture1Uploader
mount_uploader :picture3, Picture1Uploader
mount_uploader :picture4, Picture1Uploader
mount_uploader :picture5, Picture1Uploader
mount_uploader :picture6, Picture1Uploader
mount_uploader :picture7, Picture1Uploader
mount_uploader :picture8, Picture1Uploader
mount_uploader :picture9, Picture1Uploader
mount_uploader :picture10, Picture1Uploader
mount_uploader :picture11, Picture1Uploader
validate :picture_size
private
def picture_size
if picture1.size > 5.megabytes
errors.add(:picture1, "should be less than 5 MB")
end
end
end
Через некоторое рефакторинга, у меня есть это:
class Blogging < ActiveRecord::Base
for i in 1..11
mount_uploader :"picture#{i}", Picture1Uploader
end
validate :picture_size
validates :picture1, :news_title, :news_body, presence: true
private
def picture_size
pics = Array.new(11) {|i| "picture#{i+1}"}
pics.each do |p|
if p.size > 5.megabytes
errors.add(:picture1, "should be less than 5 MB")
end
end
end
end
mount_uploader
, а уродливый отлично работает. Но я не могу найти способ сделать picture_size
ограничивать размер каждого изображения (от 1 до 11).
Я могу заставить его работать с использованием 11 раз другого метода или с оператором case. Но я пытаюсь реорганизовать.
Я бы с удовольствием применил цикл «для» в методе и назвал его, но не могу понять, как это сделать. если я определить метод и называют его все изображение исчезают, и файл не получают загружен (локально или на ведро S3)
он работает, но не для сообщения об ошибке: 'def picture_size' \t' pics = Array.new (11) {| i | "picture # {i + 1}"}. each do | pic_name | ' \t \t' р = self.send pic_name ' \t \t', если P.SIZE> 5.megabytes' \t \t \t 'errors.add (: picture1, "должно быть не менее 5 МБ")' \t \t 'end' \t \t' end' \t 'end' с каким репаратором: picture1? – bobix
См. Править выше. 'self.errors.add' должен исправить это –
Работы Я просто заменил picture1 на: 'self.errors.add (pic_name,« должно быть меньше 5 МБ »)' Спасибо – bobix