ruby-on-rails - rails中的 `new`和 `build`有什么区别?

标签 ruby-on-rails

这行代码看不懂:

@club = current_user.clubs.build(club_params)

我知道可以用new方法创建相同的代码,然后我们可以保存实例变量,但是build在这种情况下是做什么的呢?

最佳答案

new 用于特定模型的新实例:

foo = Foo.new

build 用于在 AR 关联中创建新实例:

bar = foo.build_bar  # (has_one or belongs_to)

bar = foo.bars.build # (has\_many, habtm or has_many :through)

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

更新

build 和 new 是 ActiveRecord::Relation 中定义的别名:

所以如果类 Foo 有_many Bars,下面的效果是一样的:

  • foo.bars.new <=> foo.bars.build
  • Bar.where(:foo_id=>foo.id).new <=> Bar.where(:foo_id=>foo.id).build<

如果 !foo.new_record?

  • foo.bars.new <=> Bar.where(:foo_id=>foo.id).new

关于ruby-on-rails - rails中的 `new`和 `build`有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53701327/

相关文章:

ruby-on-rails - 建立ActiveRecord关系而不让它执行查询

jquery - Rails3/will_paginate/Ajax - 下一个/上一个链接无法正常工作(这是一个错误吗?)

ruby-on-rails - 一般与模型特定的观察者和邮寄者?

ruby-on-rails - Minitest:相关 AR 模型的固定装置在运行测试时导致 ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation

html - 我需要修改表单上的字段显示吗?.. Ruby on Rails...RoR...

javascript - 将 vendor js 文件(来自包装 Bootstrap )合并到 Rails 4 中

ruby-on-rails - 如何在 Ruby 中从 Savon 调用此安全 Web 服务 WSDL?

ruby-on-rails - 高级 ActiveRecord 查询 : Filter Sum through Nested Associations

ruby-on-rails - 安装 Rails 插件需要 Git?

ruby-on-rails - 获取 HTTPS 连接以使用本地 Rails 应用程序和 nginx?