2011-07-18 20 views
0

ユーザーは写真をアップロードできます。この写真はクリップを使って保存されています。写真のアップロードと保存に使用するモデルをアップロードといいます。アップロードされた画像をモデルに関連付ける方法

# Table name: uploads 
# 
# id     :integer   not null, primary key 
# created_at   :datetime 
# updated_at   :datetime 
# photo_file_name :string(255) 
# photo_content_type :string(255) 
# photo_file_size :integer 
# photo_updated_at :datetime 
# 

アップロードした写真にリンクしたいモデルがあります。メッセージと呼ばれます。

Table name messages 
# content   :string(255) 
# upload_id    :string(255) 
# created_at   :datetime 
# updated_at   :datetime 

私はメッセージモデルに画像をリンクするためにするupload_idを使用したいです。

しかしこれは

Message 

belongs_to :upload 


Upload 

has_one :message 

これは少し奇妙なように、次のように関連があることを意味します。説明にさらに追加するために、私はUserのような他のモデル用のファイルもアップロードします。だから私は本当にアップロードを使用する各モデルのテーブルにアップロードIDを格納したいと思います。

は、その後どのように私はメッセージmessage.upload_id.upload @

のインスタンスからのアップロードにアクセスすることができますか? @ user.upload_id.upload?事前

答えて

0

おかげで、あなたのモデルクラスを修正:

class Message < ActiveRecord::Base 
    has_one :upload 
end 

class Upload < ActiveRecord::Base 
    belongs_to :message 
end 

アップロードテーブルにフィールドmessage_idを追加するための移行を作成します。

次に、@message.uploadを使用して、メッセージに関連付けられているアップロードモデルにアクセスします。

+0

メッセージを保存してmessage_idを正しく保存するには、アップロードテーブルを更新する必要がありますか? – chell

+0

他のモデルのアップロードを使用する必要があるため、私はこれを行うことができないことに気付きました。ユーザーモデルも同様に言ってください。理想的には、モデルのテーブルにアップロードのIDを格納することです。そのようにして、私はすべてのアップロードを1か所に保存し、モデルのidからそれらを取得できます。 – chell

+0

それから、 'Upload belongs_to:uploadable、:polymorphic => true'と' Message has_one:upload、:: as uploadable'という多様な関連付けを使用してください。 – Hck

関連する問題