Tag: 对象持久性

何时保存has_many关系中的Active Record对象?

我正在使用Rails 1.2.3(是的,我知道)并且对于has_many如何在对象持久性方面起作用感到困惑。 为了举例,我将使用它作为我的声明: class User < ActiveRecord::Base has_many :assignments end class Assignment < ActiveRecord::Base belongs_to :user end 根据我的理解,这会生成一个方法User#assignments.build ,它创建一个Assignment对象,其user_id是接收实例的id (并且其他字段在参数中指定),但不保存此对象在数据库中。 稍后可以通过调用Assignment#save!保存该对象Assignment#save! 。 然而,我一直在使用作为教程和参考的实用程序员使用Rails的敏捷Web开发,第二版 ,说: 如果父对象存在于数据库中,则将子对象添加到集合会自动保存该子对象。 这里似乎有矛盾。 我想知道的是: 如果我执行some_user.assignments.build ,是否保存了Assignment对象? 如果我执行some_user.assignments << Assignment.new ,是否保存了Assignment对象? 如果我做some_user.assignments << Assignment.create ,是两个数据库调用,还是只有一个? 如果我在创建它之间修改Assignment对象并将其添加到some_user.assignments呢? 如果我save!会怎么样save! 一个Assignment对象,其对应的User尚未保存在数据库中? PS我之所以不仅仅使用User#assignments.create的原因是因为它不允许我将初始化扩展到外部方法,我希望能够做到这一点。 我也不想多次去数据库。

Ruby守护进程使瞬态Ruby实例的对象保持活动状态

Ruby是否提供了一种机制来在不同的运行Ruby进程之间共享变量(更重要的是,类对象和我认为对此有用的任何其他数据抽象)? 例如,如果我有一个实例化的类,初始化并仔细调整到某个状态,我希望该状态全局可用于我所有其他独立的Ruby和Irb运行全天,超过最初使用的进程的生命周期它。 我现在正在考虑有效解决这个问题的一个场景是创建一个微型Ruby脚本,仅仅作为我选择的持久对象和变量的守护者 ,并使用守护进程gem或类似物进行守护 。 设置在早上1点,在所有事情结束时在晚上拆除。 在整个一天中,另一个Ruby程序的许多实例 – 包含我的实际业务逻辑的程序 – 将来去能够使用和操作我在上面的守护进程中保持活动的所选对象。 我应该学习如何将复杂对象序列化到磁盘吗? (实际上更喜欢RAM不是磁盘,因为它无论如何都是暂时的,并且重新创建它只需花费很多时间)