我有两种模式:
class Song < ActiveRecord::Base
attr_accessible :title, :singer, :year, :production
end
和
class SongsCopy < ActiveRecord::Base
attr_accessible :title, :singer, :year
end
在创建A(Song)
时,将属性从B(SongsCopy)
复制到B
的最简单方法是什么,记住SongsCopy
没有属性{{ 1}}?
答案 0 :(得分:3)
最佳方法是使用一些SQL在数据库中执行此操作:
insert into songs_copies (title, singer, year)
select title, singer, year
from songs
where ...
但是如果你有一堆回调并且你需要运行那么你可以做这样的事情:
song = some_song_that_you_already_have
copy = SongsCopy.create(song.attributes.except('id', 'production'))
或:
copy = SongsCopy.create(song.attributes.slice('title', 'singer', 'year'))
答案 1 :(得分:1)
这不是最漂亮的可能性(当然不是首选),但最简单的可能是:
class SongsCopy < ActiveRecord::Base
def initialize(args = nil)
if args.is_a? Song
super
self.title = song.title
self.singer = song.singer
self.year = song.year
else
super(args)
end
end
end
a = Song
b = SongsCopy.new(a)
我确信还有另一种方法可以做到这一点,但上述方法应该有效。