在Rails中设置关联ID

时间:2009-09-20 17:09:24

标签: ruby-on-rails

我的图像是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

我应该这样做吗?如果是这样,怎么样?在多关联方案中,我看不到一种方法来“自动”设置多个外键值。

感谢。

罗布

2 个答案:

答案 0 :(得分:0)

我想我找到了正确的答案。我没有设置变量来保存新创建的Binary实例,而是设置了关联本身:

model.binary = Binary.new.upload( model.upload ) rescue raise

这似乎正是我所追求的。它自动设置外键值,也允许我直接对相关对象进行操作。

答案 1 :(得分:0)

你有Image / Binary的has_one / belongs_to关系吗?这可能也有用......