model關聯的失敗異常

更新於 發佈於 閱讀時間約 5 分鐘
  在練習model的關聯時,User has one Store; Store has many Products; Product has many Stores,發現Store與Product之間的關聯有異常,因為Product.new後,無法把Product的實體指定給Store,但Store確實是有save,有確實存在的。經過整理後,問題如下:
1. p1 = Product.new(name:"衛生紙") 接著執行 p1.stores = s1 卻出現 undefined method "each"的錯誤訊息。(如下圖一)
2. 反過來執行 s1.products = p1 也是出現 undefined method "each"的錯誤訊息。(如下圖二)
3. 我用 s1.products.build(name:"衛生紙") 再用 s1.save去存,結果出現 Products is invalid 的錯誤訊息。(如圖三)
4. 我用 s1.products << p1 結果出現 Validation failed: Store must exist的錯誤訊息,但從最上面 Store.all可以確定Store是有存在的。 (如圖四)
圖一
圖二
圖三
圖四

  後來依照龍哥的為自己學Ruby裡的Model關聯性單元中,依序照著老師建立model並於rails c裡執行指令,確認都正常Store與Product間都沒問題,所以確認不是windows的問題。於是比對了我的跟龍哥的schema與migration後,發現了不一樣的地方(如圖schema與圖migration)。所以可能就是因為我在建立Product model時用 store:references,產生了null:false,而老師是用store_id:integer,導致我product的store_id在nil的情況下,無法把Product.new的實體指定到store上。
圖schema
圖migration

解決方法:
1. 就是要讓Product沒有null:false的限制。
2. 強制給實體掛上store_id:
我們先把User / Store / Product都先建立出實體,並先把User跟Store先存好。
u1=User.new(name:"美國")
   (0.7ms)  SELECT sqlite_version(*)
u1.save
 TRANSACTION (0.1ms)  begin transaction
  User Create (1.0ms)  INSERT INTO "users" ("name", "created_at", "updated_at") VALUES (?, ?, ?)  [["name", "美國"], ["created_at", "2022-05-29 14:44:39.616534"], ["updated_at", "2022-05-29 14:44:39.616534"]]
  TRANSACTION (1.2ms)  commit transaction
 => true
s1=Store.new(title:"costco")
u1.store = s1
  Store Load (0.3ms)  SELECT "stores".* FROM "stores" WHERE "stores"."user_id" = ? LIMIT ?  [["user_id", 1], ["LIMIT", 1]]
  TRANSACTION (0.0ms)  begin transaction
  Store Create (0.9ms)  INSERT INTO "stores" ("title", "user_id", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["title", "costco"], ["user_id", 1], ["created_at", "2022-05-29 14:45:20.222725"], ["updated_at", "2022-05-29 14:45:20.222725"]]
  TRANSACTION (1.1ms)  commit transaction
接下來處理Product:
p1=Product.new(name:"衛生紙")
重點來了,先把store的id塞給product:
p1.store_id = s1.id
 => 1
打p1確認一下
這時可以得知,p1已經有store_id了,所以上述問題皆沒問題。
(因為一直發布失敗,或是發布後程式碼消失,造成排版亂掉,所以就只好省略部分程式碼)
avatar-img
1會員
13內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Mike的沙龍 的其他內容
在第一次建立rails專案時,通常都會遇到不少問題,像我是使用windows系統,所以也經歷了一些麻煩。如果各位第一次建立rails專案就可以看到下圖綠色字體的成功字樣,那真的如天選之人般幸運阿~ 如果你跟我一樣注定要經歷windows系統的苦痛,就請繼續看下去吧QQ
public: 完全公開的方法,內外皆可存取。 private: 對外限制,不能有特定的receiver,故僅能在類別方法裡使用,且不能有receiver。 protected : 對外有限制,不能有receiver,但在class裡面則可有receiver也可以沒有receiver。
在第一次建立rails專案時,通常都會遇到不少問題,像我是使用windows系統,所以也經歷了一些麻煩。如果各位第一次建立rails專案就可以看到下圖綠色字體的成功字樣,那真的如天選之人般幸運阿~ 如果你跟我一樣注定要經歷windows系統的苦痛,就請繼續看下去吧QQ
public: 完全公開的方法,內外皆可存取。 private: 對外限制,不能有特定的receiver,故僅能在類別方法裡使用,且不能有receiver。 protected : 對外有限制,不能有receiver,但在class裡面則可有receiver也可以沒有receiver。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
【我們不可能讓所有人都滿意】 ─什麼建議都聽進去,你就準備變成雜貨店 回想起剛開店的第一年, 我總是死死盯著專頁上的每個評論。 只要有任何的負面評論出現, 我就立刻大動肝火, 極度焦慮地嘗試解決問題。 好的時候低頭道歉,壞的時候金錢賠償, 無論是面對多不合理的條件,
這系列會以實際的資料來教學並練習,這篇資料取自Tableau的 Superstores 裡的Orders工作表,我們在做實際的數據分析以前,想要先來了解自己的資料。第一眼望去,總共有9994筆內容(+1筆欄位名),第一個問題來了,資料筆數會等於總訂單數嗎?更精確地說,到底有多少不重複的訂單?
Thumbnail
今天有一個客人打電話來反應,上週來門市訂的東西今天收到卻是錯的商品,其實上週我好像有發現自己可能搞錯了,但是我沒有回撥電話再次確認,因為我的手寫單和我的記憶有點對不上,那天發現的時候雖然懷疑自己的記憶,那因為客人已經結完帳了,我開始回想過程中,我有給客人看他要的商品圖片,也有跟他確認數量和金額,所以
和親戚去買東西,看到一些廿元的鬆身裙,我留下她自己選購,我則向前多行幾個舖頭看看有沒有我想要買的東西,親戚帶着失望走過來,我問她沒有買到麼?她說沒買到,我問她我離開時不是已經看到一些心水的嗎,她卻說那個老闆不許她繼續揀下去,並說不過是廿元的東西怎麼要揀來揀去,叫她不用再揀下去及回家睡覺就是了⋯⋯
Thumbnail
當想加入力曼會員/經銷商,但註冊總是會出現付款失敗,不同的會員都遇到一樣的問題。導師提供了使用不同瀏覽器解決這個問題的方法。
Thumbnail
有趣的是,Model 其實沒什麼嚴格的定義,所以每個人對 Model 的解讀也不盡相同,有人覺得資料怎麼儲存屬於 Model 的一部份 (受 ORM 工具的影響),有人覺得工作流程 (workflow) 是 Model 的一部份,我個人也有自己的想法,而且隨專案的規模和特性,也不是總是一樣的。
Thumbnail
本文介紹了在 SQL Server 中 Store Procedure 的使用與執行,以及學習 Store Procedure 的心得與建議。
出現這個錯誤時,如何解決: Illuminate\Database\Eloquent\MassAssignmentException Add [name] to fillable property to allow mass assignment on [App\Models\XXXX]
Thumbnail
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table:
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
【我們不可能讓所有人都滿意】 ─什麼建議都聽進去,你就準備變成雜貨店 回想起剛開店的第一年, 我總是死死盯著專頁上的每個評論。 只要有任何的負面評論出現, 我就立刻大動肝火, 極度焦慮地嘗試解決問題。 好的時候低頭道歉,壞的時候金錢賠償, 無論是面對多不合理的條件,
這系列會以實際的資料來教學並練習,這篇資料取自Tableau的 Superstores 裡的Orders工作表,我們在做實際的數據分析以前,想要先來了解自己的資料。第一眼望去,總共有9994筆內容(+1筆欄位名),第一個問題來了,資料筆數會等於總訂單數嗎?更精確地說,到底有多少不重複的訂單?
Thumbnail
今天有一個客人打電話來反應,上週來門市訂的東西今天收到卻是錯的商品,其實上週我好像有發現自己可能搞錯了,但是我沒有回撥電話再次確認,因為我的手寫單和我的記憶有點對不上,那天發現的時候雖然懷疑自己的記憶,那因為客人已經結完帳了,我開始回想過程中,我有給客人看他要的商品圖片,也有跟他確認數量和金額,所以
和親戚去買東西,看到一些廿元的鬆身裙,我留下她自己選購,我則向前多行幾個舖頭看看有沒有我想要買的東西,親戚帶着失望走過來,我問她沒有買到麼?她說沒買到,我問她我離開時不是已經看到一些心水的嗎,她卻說那個老闆不許她繼續揀下去,並說不過是廿元的東西怎麼要揀來揀去,叫她不用再揀下去及回家睡覺就是了⋯⋯
Thumbnail
當想加入力曼會員/經銷商,但註冊總是會出現付款失敗,不同的會員都遇到一樣的問題。導師提供了使用不同瀏覽器解決這個問題的方法。
Thumbnail
有趣的是,Model 其實沒什麼嚴格的定義,所以每個人對 Model 的解讀也不盡相同,有人覺得資料怎麼儲存屬於 Model 的一部份 (受 ORM 工具的影響),有人覺得工作流程 (workflow) 是 Model 的一部份,我個人也有自己的想法,而且隨專案的規模和特性,也不是總是一樣的。
Thumbnail
本文介紹了在 SQL Server 中 Store Procedure 的使用與執行,以及學習 Store Procedure 的心得與建議。
出現這個錯誤時,如何解決: Illuminate\Database\Eloquent\MassAssignmentException Add [name] to fillable property to allow mass assignment on [App\Models\XXXX]
Thumbnail
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table: