我已经设置了两个模型,其中一个专辑有一个类型,并且该类型有很多属于它的专辑。
class Album < ActiveRecord::Base
attr_accessor :genre_id
belongs_to :genre
end
class Genre < ActiveRecord::Base
has_many :albums
end
这是我的迁移文件:
class AddGenreIdToAlbum < ActiveRecord::Migration
def change
add_column :albums, :genre_id, :integer
end
end
在我的rails控制台中,我可以为我的相册指定一个类型:
album = Album.last
album.genre = Genre.last
问题在于,如果我查询该类型的专辑,我会得到一个空数组:
genre = Genre.last
genre.albums
=> #<ActiveRecord::Associations::CollectionProxy []>
为了让两个模型相应保存,我需要做什么?
答案 0 :(得分:4)
答案 1 :(得分:1)
您应该从attr_accessor :genre_id
模型中删除Album
,因为它会使genre_id
成为虚拟属性,这意味着不会被保留在数据库中。它只有在分配给它的实例存储在内存中才可用。实例消失后,分配的值就消失了。而且我很确定你希望将genre_id
保存在数据库中,因为我可以在问题中看到相同的迁移,在这种情况下它是唯一合乎逻辑的。
class Album < ActiveRecord::Base
attr_accessor :genre_id ## <<== Remove this
belongs_to :genre
end
当然!正如在其他答案中所建议的那样,确保您实际调用save
方法将关联保存在数据库中。
答案 2 :(得分:0)
你可以尝试:
album = Album.last
Genre.last.albums << album
Genre.last.albums
答案 3 :(得分:0)
我上面看到的问题是专辑没有与流派相关联(Genre.last) 尝试:
genre = Genre.last
genre.albums.build(Album.last))
genre.save
在db(专辑记录)中需要有一个记录,其中包含该特定类型的外键,除非我们特别要求它创建该关联,否则这种情况不会发生......我是否有意义?