У меня есть изображение, belongs_to
для пользователя и двоичного файла (физические атрибуты файла хранятся в отдельной модели). В старые времена (читай: вчера) я установил значение user_id вручную:
@image = Image.new( params[:image] )
@image.user_id = current_user
Мой друг недавно сообщил мне, что вместо этого я должен использовать ассоциации, поэтому мой код контроллера стал:
@image = current_user.image.new( params[:upload] )
Это, конечно, намного приятнее и прекрасно работает. Теперь я хотел бы сделать что-то подобное для моей бинарной ассоциации, но я не знаю как. Извлечение и хранение моего двоичного файла выполняется классом BinaryObserver
, который соблюдает модель Image
. В обратном вызове before_validation
наблюдателя загруженный файл отправляется в класс Binary
и создается / сохраняется двоичный объект. После сохранения мне нужно установить значение binary_id
для моей модели изображения. Я делал это вручную, но теперь я чувствую, что должен делать это по-другому. Вот что у меня в BinaryObserver#before_validation
:
def before_validation( model )
binary = Binary.new.upload( model.upload ) rescue raise
binary = binary.store()
model.binary_id = binary.id
rescue => e
#
# Rethrow any exception that was raised.
#
raise
end
Должен ли я делать это по-другому? Если так, то как? В сценарии с несколькими ассоциациями я не вижу способа установить более одного значения внешнего ключа «автоматически».
Спасибо.
Rob