Вы знаете на некоторых сайтах, когда Вас просят загрузить, скажем, аватар, Вы нажимаете на кнопку, выбираете Ваш файл, затем совершаете нападки хорошо, но Перед представлением страницы (как в, никакая запись не создается/обновляется), немного предварительного просмотра изображения обнаруживается?
Как я выполнил бы эту Скрепку использования для направляющих?
Бонусные очки для любого, кто может указать на меня к учебному руководству или чему-то, что могло бы сказать мне, как сделать обрезку JavaScript на изображении прежде, чем сохранить запись.
Я не был в состоянии найти много на Google на предмете... благодарит за справку!
Такие вещи проблематичны с точки зрения Rails из-за способа загрузка изображений работает. Один из способов улучшить его работу:
Типичная модель выглядит примерно так:
class Avatar < ActiveRecord::Base
has_attached_file :image
# ... Additional Paperclip options here
before_validation :assign_unique_key
belongs_to :user
def to_param
self.unique_key
end
protected
def assign_unique_key
return if (self.unique_key.present?)
self.unique_key = Digest::SHA1.hexdigest(ActiveSupport::SecureRandom.random_number(1<<512).to_s)
end
end
Причина наличия поля unique_key в том, что вы можете связать его с формой потенциально несохраненной записи. Выгодно использовать unique_key вместо id при вводе его в URL-адреса, поскольку трудно сказать, должен ли пользователь видеть это изображение или нет, когда оно загружено, поскольку пользователь-владелец еще не может быть назначен.
Это также не позволяет любопытным людям изменить какой-либо последовательный, легко угадываемый идентификатор в вашем URL-адресе и увидеть другие загруженные аватары.
Вы можете получить окончательный URL-адрес эскиза аватара с измененным размером, как и любую другую модель на этом этапе.
Вы можете легко вырезать параметры при получении и преобразовать их обратно в ID-номера аватара:
# If an avatar_id parameter has been assigned...
if (params[:user][:avatar_id])
# ...resolve this as if it were a unique_key value...
avatar = Avatar.find_by_unique_key(params[:user][:avatar_id])
# ...and repopulate the parameters if it has been found.
params[:user][:avatar_id] = (avatar && avatar.id)
end
# ... params[:user] used as required for create or update
По мере того, как люди загружают и повторно загружают изображения, у вас в конечном итоге будет большое количество потерянных записей, которые фактически нигде не используются. По прошествии разумного времени легко написать задачу с граблями, чтобы очистить все это. Например:
task :purge_orphan_avatars => :environment do
# Clear out any Avatar records that have not been assigned to a particular
# user within the span of two days.
Avatar.destroy_all([ 'created_at<? AND user_id IS NULL', 2.days.ago ])
end
Использование destroy_all должно также привести к очистке всего материала скрепок.