2011-10-28 11 views
1

私のデータは、基本的にギャラリーには多くの画像があり、画像はギャラリーに属しています。ピクチャテーブルにforeign_key 'gallery_id'があります。has_many-belongs_toアソシエーションに関する問題

私は以前has_manyとbelongs_toの関連付けを使用していましたが、私は何が間違っているのか分かりません。

これらは私の関連するモデルは、次のとおりです。

class Gallery < ActiveRecord::Base 
    attr_accessible :name 
    has_many :pictures 
    belongs_to :home 
end 

class Picture < ActiveRecord::Base 
    belongs_to :gallery 
    validates :image, :presence => true 
    mount_uploader :image, ImageUploader 
end 

私が行う場合、これは:

gallery = Gallery.create(:name => 'some name') 
picture = Picture.create(:name => 'some name' , :image => 'some_image') 
picture.gallery = gallery 

これが本当である:

picture.gallery == @gallery 

が、このありえない

gallery.pictures == [ picture ] 
0 gallery.picturesが空の配列を返すため、

が返されます。一方

私は絵をこのように作成した場合、すべてが期待どおりに動作:

picture = Picture.create(:name => 'some name' , :image => 'some_image', :gallery_id => gallery) 

なぜ?私が間違っていることは何ですか?私はRails 3.1.1とsqliteを使用しています

答えて

2

は、それが動作します

gallery.pictures.create :name => 'some name' , :image => 'some_image' 
0

あなたのギャラリーに写真を追加するとき。割り当てを別の方法で行います。

gallery = Gallery.create(:name => 'some name') 
picture = Picture.create(:name => 'some name' , :image => 'some_image') 
gallery.pictures << picture 

これにより、#picturesメソッドが更新され、新しく割り当てられた画像が返されます。

+0

おかげで、動作するはずですが、私はまだ理解していけない理由は、私の質問のdoesntの仕事のコード。すべての手がかりは? –

+0

Railsがモデルをキャッシュする方法のために 'gallery'をデータベースから再ロードする必要があるためです。ギャラリーに画像を割り当てた後に 'gallery.reload'を呼び出すと、すべて正常に動作します。 –

関連する問題