【问题标题】:Problems with a has_many - belongs_to associationhas_many - belongs_to 关联的问题
【发布时间】:2011-10-28 15:28:17
【问题描述】:

我的数据基本上是画廊有很多图片,并且图片属于一个画廊。图片表有 foreign_key 'gallery_id'。

虽然我以前使用过 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 ]

因为 gallery.pictures 返回一个空数组。

另一方面,如果我以这种方式创建图片,一切都会按预期进行:

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

为什么?我做错了什么?我正在使用 Rails 3.1.1 和 sqlite

【问题讨论】:

    标签: ruby-on-rails-3 has-many belongs-to model-associations


    【解决方案1】:

    它应该可以工作

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

    【讨论】:

      【解决方案2】:

      将图片添加到您的画廊时。尝试反过来做作业。

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

      这将更新#pictures 方法以返回新分配的图片。

      【讨论】:

      • 谢谢,这行得通,但我仍然不明白为什么我的问题中的代码不起作用。有什么线索吗?
      • 是的,因为 Rails 缓存模型的方式需要从数据库中重新加载 gallery。如果您在将图片分配给画廊后致电gallery.reload,那么一切都应该正常。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多