Ruby 板


LINE

全新新手自己看网路资料自学中 (Ruby 2.1.5 on Rails 4.2.0) 想请教请教, 问题比较初级, 请多包涵 一直看不是很懂ActiveRecord某些点 ※ 引述《ihower (好2ˇ)》之铭言: : ※ 引述《tonytonyjan (南洋大兜虫)》之铭言: : : 环境: : : Rails ~> 3.0.0 : : 状况: : : 在阅读文章、书籍的时候,看到每个人都说 : : has_one, belongs_to後面要放单数的association_id : : has_many, has_and_belongs_to_many及:through後面要放复数 : : 但是皆知其然不知其所以然 : : 那些association_id的域名来自哪里? : : 是DB中已存在的table name吗?还是已存在的model name呢? : 这几个association方法都有参数是 :foreign_key 和 :class_name : 这两个值通常不需要设定, 因为rails会依照惯例帮你设定 : belongs_to :user 等同於 : belongs_to :user, :foreign_key => :user_id, :class_name => "User" 第一) 对belongs_to的部分是看懂了, 依照惯例会对应到class的名称 但我有个部分不太懂, 假如是has_many 而刚好复数的字眼不是单纯加上s的呢? 例如 (看国外范例讲的 但没看懂为什麽) 在article.rb中 belongs_to :category #这部分理解了惯例 在category.rb中 has_many :categories #这部分不理解为何Rails会知道对应到Category class呢? 第二) 为何加入has_many, belongs_to就能做到一对多, 多对一的效果? 在schema.rb并没有看到t.reference呀? 而在migration档案中还需要特定去指定吗? (有些网站说要, 有些说不要) 难道不需要去修改DB的data model吗? 不太理解背後的运作原理, 因为migration也没有设定的话, 做rake db:migration也不会改变data model才对 为何可以做到资料关联呢? 至少belongs_to关联的资料表需要增加一个对方id栏位啊 第三) 目前理解似乎是 a) 对资料物件(model)而言, 假如是资料属性attribute, 则是透过建立migration档案 设定attributes, 在rake db:migrate时, 更新资料库data model, 并且生成一份最新 的schema.rb档, 类似资料库的DDL b) 对资料物件而言, 假如是物件之间的关联属性, 则透过XXModel.rb去做设定维护, 但设定维护的has_many :YYs这些方法, 是Rails自动在XXmodel.rb中加入一个method YYs可以去关联汲取YY的资料 但是这些关联都是写在callback内, 并没有真正的在对方的资料表建立FK (没有透过db fk constraint, 只是栏位ID值本身是对应的) 但还是不太理解为何Rails会自动找到对应的资料表? 特别像是has_many :categories (难道像是这样的名词就需要手动设定t.references?? 有点被多个范例搞混了) 也还是不太理解为何资料表如何被增加栏位, 因为并没有看到has_many/belongs_to的关联法需要做db:migrate 到底是如何影响database physical schema的呢? 恳请赐教!! 看许多网站资料众说纷纭, 不知何者为真, 感谢!! (是data warehouse背景, 写SQL习惯了, 越看ActiveRecord越不懂, 实在很需要各位解惑, 网上各种答案都有很糊涂, 谢谢) : 至於DB的table叫啥,依照惯例则是Model名字的复数: : class UserJob < ActiveRecord::Base : end : 等同於 : class UserJob < ActiveRecord::Base : set_table_name :user_jobs : set_primary_key :id : end : 因此, 如果你通通依照rails惯例, 你就不需要写 set_table_name, : set_primary_key, :foreign_key, :class_name....这些参数了, 这就叫 : 惯例胜於设定(Convention Over Configuration)原则 : : 我如果故意单数写复数,复数写单数,仍可以运作吗? : no, 除非你手动指定 :foreign_key 和 :class_name 等 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.224.163.2
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ruby/M.1425052630.A.6FA.html







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP