1.model中使用through:
参与者:项目(project: id,project_name…),关系表(relation:project_id,role,firm_id…),公司(firm:id,firm_name…)
关系:关系表记录参与项目的公司id,以及公司的职能,一个项目可以有多个参与公司
需求:在project里面写个scope直接找到相关公司
关系体现在project里面肯定有 has_many :relations ,:foreign_key=>'project_id'
然后relation里面也有 belongs_to :firm,:foreign_key=>'firm_id'
这里想直接在project里面找到firms则可以在project的model里面写
has_many :firms ,through: :relations,source: :firm
2.includes,在查询的时候关联相关 例如:
Project.includes([:firms,:contacts=>[:telephones]]).where...
可以多级一起放进去,防止n+1查询,并且还有个model的方法可以判断是否已经绑定了关联的model:obj.association(method.to_sym).loaded?
project.association(:firms).loaded? #返回project.firms是否已经绑定到project里,如果是true则输入project.firms不会执行查询,如果是false则会通过namespace执行一次查询并绑定
3.h 这个是helper里的方法,用的时候没想起来,容易忘,用法是h(str),就是替换掉html里的特殊符号成单纯的字符 ' " < > & 这几个
4.几个数字除0的问题:
0/0会报错
0.0/0=NaN
1.1/0=Infinity
5.Rails.cache使用:
Rails.cache.write('product_categories', categories)
Rails.cache.read('product_categories')
可以直接存储对象、数组、hash等,存在服务器缓存里,不经常更换内容的话可以方便读取,省得每次都查询,清掉缓存只需要Rails.cache.write('product_categories', nil)就可以