我有一个图像,belongs_to
一个用户和一个二进制文件(物理文件属性存储在一个单独的模型)。在过去(读:昨天),我手动设置的USER_ID值:在Rails中设置关联的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
我这样做。图像属于二进制和二进制has_one图像。 – 2009-09-21 01:28:13