只需尝试找出如何将属性从一个活动模型复制到另一个活动模型而不必逐个复制。
我有两个模型,一个是RFM(ruby到filemaker),一个是mongoid都是mixin活动模型。
gem "ginjo-rfm"
模型
require 'rfm'
class StudentAdmin < Rfm::Base
config :layout => 'STUDENT_ADMIN_LAYOUT'
attr_accessor :name_first,:name_last
end
Mongoid模型
class Student
include Mongoid::Document
field :first_name, type: String
field :last_name, type: String
end
我能做一个快速的副本吗?我在活动记录对象之间找到了一个样本,例如
student_admin = ... #load StudentAdmin
Student.new(student_admin.attributes.slice(Student.attribute_names))
但RFM不提供属性方法。
对不起我想要实现的目标是比这更好的方式
student_admins = #get student admins from external service
students = []
student_admins.each() do |sa|
students.push(Student.create!(first_name: sa.name_first, last_name: sa.name_last))
end
这个例子只显示了2个属性,但实际上有超过50个,并且想知道是否有办法这样做而不必指定每个属性,例如如果两个对象上的属性名称相同,则自动复制它们。
答案 0 :(得分:0)
试试这个:
students = student_admins.map do |sa|
attrs = sa.methods.inject({}) do |hash, m|
next unless Student.column_names.include? m.to_s
hash[m] = sa.send m
end
Student.create(attrs)
end
Student
必须是继承自ActiveRecord::Base
:
class Student < ActiveRecord::Base
...
end