摘要
我试图查看是否可以将Active Record及其所有关系导出到文件或zip文件。
方案
我有一个看起来像这样的课程模型
class Course < ActiveRecord::Base
belongs_to :user
has_many :lessons, -> { order("position ASC") }, dependent: :destroy
end
接下来是课程
class Lesson < ActiveRecord::Base
belongs_to :course
has_many :slides, dependent: :destroy
validates :course_id, presence: true
validates :title, presence: true
end
接下来是幻灯片
class Slide < ActiveRecord::Base
belongs_to :lesson
has_attached_file :file
validates_attachment_content_type :file, :content_type => ["application/vnd.ms-excel",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"application/vnd.ms-powerpoint",
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
"application/vnd.google-apps.presentation"]
validates :lesson_id, presence: true
validates :position, presence: true
validates :title, presence: true
end
我使用Paperclip Gem处理文件。
使用案例
比尔,一个小陶艺班的老师想和全国各地的陶艺老师吉尔分享他自制的陶艺课程。她一直没有上网,因此他会向她发送一个USB拇指驱动器,当然她可以将其导入到她的课程应用程序中。Bill登录,进入他的课程主页,然后点击&#34;导出&#34;。片刻之后,文件/ zip就在他的下载文件夹中,然后将其保存到拇指驱动器中。收到此消息后,Jill登录到她的离线系统并点击“#34;导入课程&#34;”,从而创建在她的Rails应用程序上发送的课程Bill的镜像副本。
问题
我需要能够将记录导出到包含这些关系等的csv或xml文件,然后我可以将其导入到同一应用程序的离线安装中。
加成
如何将附件与导出一起打包以进行简单的导入和分发?
答案 0 :(得分:2)
是的,您可以执行此操作,但有一些注意事项:查看Ruby Marshall和Rails Serialize
Marshall:&#34;编组库将Ruby对象的集合转换为字节流,允许它们存储在当前活动脚本之外。随后可以读取该数据并重构原始对象。&#34;
序列化:&#34;如果您有一个属性需要作为对象保存到数据库,并作为同一对象检索,则使用此方法指定该属性的名称,它将自动处理。 &#34;
您还可以考虑更灵活的方式,例如JSON导出和JSON导入。这些通常使您不必发送实际数据库,也需要特定版本号匹配。请参阅Rails ActiveModel Serializer for JSON和宝石,例如jbuilder和oj。