coz*_*zos 10 ruby activerecord ruby-on-rails ruby-on-rails-4 ruby-on-rails-5
所以我的应用程序中的代码附加了与"<<"运算符的has_many关系,如下所示:
class BlogPost < ActiveRecord::Base
has_many :comments
def add_comment(content)
@new_comment = Comment.create(content)
self.comments << @new_comment
end
end
Run Code Online (Sandbox Code Playgroud)
它似乎工作.我从来没有真正质疑它或想知道什么时候它叫"保存"(我想我从来没有强烈理解何时称为"保存"开始).
但是,似乎after_save注释中的钩子没有在我的add_comment函数中被激活,这促使我问:
<<操作员如何在activerecord中工作?在哪里可以阅读更多信息?
谢谢
K M*_*lam 17
当您使用shoveloperator(<<)时,Rails会自动保存关联的对象.所以,当你这样做时:
self.comments << @new_comment
Run Code Online (Sandbox Code Playgroud)
@new_commentcomments除非父对象是新记录,否则会添加到集合中并立即触发更新SQL而不等待父对象上的保存或更新调用.
从这份文件
collection <<(object,...)通过在连接表中创建关联,将一个或多个对象添加到集合中(collection.push和collection.concat是此方法的别名).请注意,除非父对象是新记录,否则此操作会立即触发更新SQL而不等待父对象上的保存或更新调用.