Bla*_*ere 5 ruby serialization json ruby-on-rails
主要思想是我有一个 Rails 应用程序的几个工作实例,然后是一个主要聚合
我想用下面的伪伪代码来做这样的事情
posts = Post.all.to_json( :include => { :comments => { :include => :blah } })
# send data to another, identical, exactly the same Rails app
# ...
# Fast forward to the separate but identical Rails app:
# ...
# remote_posts is the posts results from the first Rails app
posts = JSON.parse(remote_posts)
posts.each do |post|
p = Post.new
p = post
p.save
end
Run Code Online (Sandbox Code Playgroud)
我回避使用活动资源,因为我有数千条记录要创建,这意味着每条记录有数千个请求。除非有一种方法可以通过简单的活动资源在一个请求中完成所有操作,否则我想避免使用它。
您可以实施多种选项来使其发挥作用:
正如其他人回答的那样,您可以使用ActiveResource。阅读您的评论后,由于多重请求方面,这似乎是您想要避开的解决方案
您可以在第二个 Rails 应用程序中有一个控制器来接收数据并从中创建记录。
class RecordReceiver < ActiveRecord::Base
def create
params[:data][:posts].each do |p|
Post.create(p)
end
end
end
Run Code Online (Sandbox Code Playgroud)
您可以在“API”命名空间内命名该控制器,如果实施正确,这是一个相当干净的解决方案。
您可以在两个应用程序之间共享一个数据库。这意味着您不需要将数据从一个模型发送到另一个模型,它已经存在了。对于开发人员来说,这是最少的工作量,但根据您所拥有的系统架构,这可能是不可能的。
您可以在每个应用程序中实现多个数据库,如下所示:
#Add to database.yml
other_development:
adapter: mysql
database: otherdb_development
username: root
password:
host: localhost
other_production:
adapter: mysql
database: otherdb_production
username: root
password:
host: localhost
Run Code Online (Sandbox Code Playgroud)
然后,像这样定义你的模型:
class Post < ActiveRecord::Base
end
class PostClone < ActiveRecord::Base
establish_connection "other_#{RAILS_ENV}"
end
Run Code Online (Sandbox Code Playgroud)
现在,您的Clone模型将指向当前数据库,并且该PostClone模型将指向另一个数据库。通过访问两者,您可以在需要时使用基本模型方法复制数据。
由于您不想使用 ActiveResource,因此我建议您在应用程序之间共享数据库。如果这不可能,那么尝试使用两个模型,每个模型进入不同的数据库。最后,接收控制器是一个有效的选项,尽管速度较慢(因为它需要在数据库请求之上执行 HTTP 请求)