我的图像是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
我应该这样做吗?如果是这样,怎么样?在多关联方案中,我看不到一种方法来“自动”设置多个外键值。
感谢。
罗布
答案 0 :(得分:0)
我想我找到了正确的答案。我没有设置变量来保存新创建的Binary
实例,而是设置了关联本身:
model.binary = Binary.new.upload( model.upload ) rescue raise
这似乎正是我所追求的。它自动设置外键值,也允许我直接对相关对象进行操作。
答案 1 :(得分:0)
你有Image / Binary的has_one / belongs_to关系吗?这可能也有用......