Ruby 板


LINE

※ 引述《Pagan (test)》之铭言: : 全新新手自己看网路资料自学中 (Ruby 2.1.5 on Rails 4.2.0) : 想请教请教, 问题比较初级, 请多包涵 : 一直看不是很懂ActiveRecord某些点 : ※ 引述《ihower (好2ˇ)》之铭言: : : 这几个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呢? Ruby中有单复数名词的转换对应 这部分其实有不少错误该不该修的issue XDD 总之就是有个转换表/公式在 所以他知道 (虽然有些错误在www) : 第二) : 为何加入has_many, belongs_to就能做到一对多, 多对一的效果? : 在schema.rb并没有看到t.reference呀? : 而在migration档案中还需要特定去指定吗? (有些网站说要, 有些说不要) : 难道不需要去修改DB的data model吗? : 不太理解背後的运作原理, 因为migration也没有设定的话, : 做rake db:migration也不会改变data model才对 : 为何可以做到资料关联呢? 至少belongs_to关联的资料表需要增加一个对方id栏位啊 has_many, belongs_to只修改了Model class增加了些方法而已 实际上还是需要增加migration去新增对应的栏位 不然model只是空有方法但查不到资料 : 第三) : 目前理解似乎是 : 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 等 其实很想说 你在这边问了问题 有没有试着建过has_many的model试过 其实你的问题如果有试过应该会解决一部份 像migration 如果没对应栏位 console测试时就会跳找不到栏位的错误 你应该就会知道答案了 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.218.76.235
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ruby/M.1425055849.A.251.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灯, 水草

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

TOP