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/m.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燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP