Rails关联=返回值和行为

睡觉

该指南没有说明association=方法的返回值例如has_one association=

对于简单的情况,它返回分配的对象。但是,这仅在分配成功时进行。

有时association=会立即将更改保存在数据库中,例如设置has_one关联的记录。

  • 如何association=应对分配失败?(我可以告诉它是否失败吗?)
  • 有爆炸声!失败引发异常的版本?
睡觉

http://guides.rubyonrails.org/association_basics.html#has-one-association-reference-when-are-objects-saved-questionmark

因此,该指南的另一部分确实讨论了关联分配的返回行为。

如果关联分配失败,则返回false。没有这个的爆炸版本。

更新

周围:has_many / has_one的行为似乎有所不同。

演示资料库:https : //github.com/lulalalalistia/association-assignment-demo

在演示中,我在第一次提交中植入了一些数据,在第二次提交中植入了硬代码验证错误。演示使用Rails 4.2

has_many通过

class Boss < ActiveRecord::Base
  has_many :room_ownerships, as: :owner
  has_many :rooms, through: :room_ownerships
end

当我添加房间时,会引发异常:

irb(main):008:0> b.rooms << Room.first
  Boss Load (0.2ms)  SELECT  "bosses".* FROM "bosses"  ORDER BY "bosses"."id" ASC LIMIT 1
  Room Load (0.1ms)  SELECT  "rooms".* FROM "rooms"  ORDER BY "rooms"."id" ASC LIMIT 1
   (0.1ms)  begin transaction
   (0.1ms)  rollback transaction
ActiveRecord::RecordInvalid: Validation failed: foo
irb(main):014:0> b.rooms
=> #<ActiveRecord::Associations::CollectionProxy []>

has_one通过

class Employee < ActiveRecord::Base
  has_one :room_ownership, as: :owner
  has_one :room, through: :room_ownership
end

当我添加房间时,我不会出现异常:

irb(main):021:0> e.room = Room.first
  Room Load (0.2ms)  SELECT  "rooms".* FROM "rooms"  ORDER BY "rooms"."id" ASC LIMIT 1
  RoomOwnership Load (0.1ms)  SELECT  "room_ownerships".* FROM "room_ownerships" WHERE "room_ownerships"."owner_id" = ? AND "room_ownerships"."owner_type" = ? LIMIT 1  [["owner_id", 1], ["owner_type", "Employee"]]
   (0.1ms)  begin transaction
   (0.1ms)  rollback transaction
=> #<Room id: 1, created_at: "2016-10-03 02:32:33", updated_at: "2016-10-03 02:32:33">
irb(main):022:0> e.room
=> #<Room id: 1, created_at: "2016-10-03 02:32:33", updated_at: "2016-10-03 02:32:33">

这使得很难查看分配是否成功。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails关联和删除

来自分类Dev

Rails 自身和关联

来自分类Dev

Rails .includes不返回关联

来自分类Dev

使用 Rails 模型方法获取和返回值

来自分类Dev

Rails 如何查询嵌套关联返回所有嵌套关联

来自分类Dev

Rails:ActiveRecord关联返回零关系

来自分类Dev

Rails:基于关联值的ActiveRecord查询

来自分类Dev

Rails-存储值-通过关联

来自分类Dev

Rails:为什么关联值无法保存?

来自分类Dev

Rails-存储值-通过关联

来自分类Dev

Rails-根据关联值搜索对象

来自分类Dev

Ruby On Rails:从关联模型访问值

来自分类Dev

Rails验证和belongs_to关联

来自分类Dev

Rails 4-关联和范围

来自分类Dev

Rails 5、Postgesql 和按关联分组

来自分类Dev

Rails Activerecord不返回值

来自分类Dev

MYSQL:与GROUP BY的最高编号关联的返回值

来自分类Dev

Rails has_many关联返回空数组

来自分类Dev

Rails返回所有二级关联

来自分类Dev

使用ajax和rails删除和更新关联模型的对象

来自分类Dev

具有嵌套关联和组的Rails查询(按关联对象)

来自分类Dev

无法在Rails应用程序中获取关联的值

来自分类Dev

基于Rails中的关联值的自定义验证器

来自分类Dev

Rails:优化查询关联表中的最大值

来自分类Dev

Rails_admin,根据关联更改枚举字段的值

来自分类Dev

Rails-具有多种关系的多态关联-索引值

来自分类Dev

如何验证 Rails 中是否存在关联值?

来自分类Dev

Rails 4多态关联和关注点

来自分类Dev

Rails-has_one和belongs_to进行关联