[英]Why doesn't chaining Model queries / assignments work in rails console?
在rails控制台中這是如何工作的:
foo = Ad.find(2)
foo.user = User.find(1)
foo.user # => #<User id: 1, name: "john">
但這不是嗎?
Ad.find(2).user = User.find(1)
Ad.find(2).user # => nil
因為每次編寫Ad.find(2)
它都會返回ID為2的Ad
類的新實例,並且您的代碼正在更改該實例上的關聯User,但從不保存更改 。 所以在這一行:
Ad.find(2).user = User.find(1)
您獲取ID為2的Ad實例,則將該實例的user
關聯設置為User.find(1)
,但此更改永遠不會保存到數據庫,並且在語句結束時丟失。 在下一行:
Ad.find(2).user # => nil
您只是在獲取ID為2的Ad的另一個實例,但是由於之前的更改從未保存到數據庫中,因此user
為nil
。
就像您在第一個代碼段中所顯示的那樣,您必須使用局部變量臨時保留對您的Ad實例的引用,以便對其調用.save
才能持久保存到數據庫。 這應該工作:
foo = Ad.find(2)
foo.user = User.find(1)
foo.save
Ad.find(2).user # => #<User id: 1>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.