rails 中model之间的 association (:inverse_of)

class Customer < ActiveRecord::Base

  has_many :orders

end

class Order < ActiveRecord::Base

  belongs_to :customer

end

如上代码两个model在做如下查询的时候:

c = Customer.first

o = c.orders.first

c.first_name == o.customer.first_name # true

c.first_name = "other name"

c.first_name == o.customer.first_name # false

这是因为c 和 o.customer 在内存中两个对象对应的同一个数据

当在model中添加  :inverse_of 的时候就会出现这种情况:

class Customer < ActiveRecord::Base

  has_many :orders, inverse_of: :customer

end

class Order < ActiveRecord::Base

  belongs_to :customer, inverse_of: :orders

end

####

o = c.orders.first

c.first_name == o.customer.first_name # true

c.first_name = "other name"

c.first_name == o.customer.first_name # true

当添加了inverse_of ,只会加载一个customer对象

在用inverse_of的时候是有限制的:

有这些条件:through  :polymorphic :as 的时候,因为有belongs_to和has_many, inverse_of 这个会被忽略!

当有这些条件的时候

:conditions
:through
:polymorphic
:foreign_key 关联不会自动逆转!

rails 中model之间的 association (:inverse_of)

时间: 2024-07-31 12:06:36

rails 中model之间的 association (:inverse_of)的相关文章

RailsCast26 Hackers Love Mass Assignment rails中按params创建、更新model时存在的安全隐患

Mass assignment是rails中常用的将表单数据存储起来的一种方式.不幸的是,它的简洁性成了黑客攻击的目标.下面将解释为什么及如何解决. 上述表单为一个简单的注册表单.当用户填入name,点击提交时,一个新用户被创建.用户模型被如下定义: ruby create_table :users do |t| t.string :name t.boolean :admin, :default => false, :null => false end 当用户点击提交时,如下的action被执

【Ruby on Rails】Model中关于保存之前的原值和修改状态

今天在Rails的Model中遇到了一个问题—— 当我从Model类中获取了一个ActiveRecord对象,对其进行了一系列修改(尚未保存),我该如何确定究竟哪些修改了呢? (设Model为Option,相关的的参数为correct) 我本来采取的方法是——在数据表中新增一个ori_correct参数,每次对象保存之前都和correct做到同步,这样一来,是不是correct字段发生了修改也就得以判断了. 但是这样的缺点也显而易见——如果以后参数个数很多的话,岂不是得每一个都得来一个相应的or

ASP.NET-MVC中Entity和Model之间的关系

Entity 与 Model之间的关系图 ViewModel类是MVC中与浏览器交互的,Entity是后台与数据库交互的,这两者可以在MVC中的model类中转换 MVC基础框架 来自为知笔记(Wiz) 附件列表 ASP.Net MVC基础框架.png viewmodel.JPG

rails中accepts_nested_attributes_for应用

Model: class Blog < ActiveRecord::Base has_many :strip_rules accepts_nested_attributes_for :strip_rules, allow_destroy: true end class StripRule < ActiveRecord::Base belongs_to :blog attr_accessible :rule, :blog_id end 要实现在新建和修改blog时可以添加/删除任意多个strip

asp.net mvc4中model与Model的区别

@model模型定义 使用@model关键字可以定义一个Action里所对应的一个模型(经常可以叫他实体类), 其实是对动态变量进行实例化,这样就可以直接在cshtml文件中调用“Model”变量. 而这个模型的实例,需要通过Controller进行传输,如果没有则“Model”将为null. 模型可以是一个实体类,也可以是一个列表实例,字典对象都可以进行定义,但是和 Controller中的Action传回来的实例一定要一样,否则将会出现错误. Model 定义 MVC的第一个字母M是Mode

ASP.NET MVC3中Model验证

原文:ASP.NET MVC3中Model验证 概述 上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验证. 本节我们就学习如何使用 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据模型中的各个字段的验证. 这些特性用于定义常见的验证模式,例如范围检查和必填字段.而 DataAnnotations 特性使 MVC 能够提供客户端和服务器验证检查,使

rails中migration数据库后测试不通过的问题

rails项目中由于后期需求变化,需要在products数据库中增加一个字段来满足多国家商品的分类: rails g migration add_locale_to_products locale:string 完了之后,正常的web app操作均正常,但是末了测试时发生异常: rake test 打印出一大坨错误 :( ,进入test.sqlite3数据库中没有看到新增的字段.遂使用如下命令强制将数据库更改应用到test数据库: RAILS_ENV=test rake db:seed 但是还是

rails中一个窗体多个模型——fields_for

借助field_for可以生成表单来处理两个或更多模型对象的数据 先看一个官方的例子,一个表单中有person和permission两个模型,其中每个person包含一个permission <%= form_for(@person) do |person_form| %> First name: <%= person_form.text_field :first_name %> Last name: <%= person_form.text_field :last_name

TableView中Model层数据

TableView中Model层数据 一.如果plist文件中的形式:NSArray -> NSDictionary ->NSArray 最外层的字典 + (instancetype)carGroupsWithDict:(NSDictionary *)dict { return [[self alloc] initWithDict:dict]; } - (instancetype)initWithDict:(NSDictionary *)dict { self = [super init];