回答
您的模型中不需要使用object_id
。數據庫中不應該有名爲object_id
的列。
object_id
只是一個默認方法,所有(Ruby 1.9中除BasicObject
除外)對象都有(請參閱docs)。
返回obj的整數標識符。 對於給定對象 , 所有對id的調用都將返回相同的號碼,並且沒有兩個活動對象將共享 的id。 取代已棄用的Object#id。
2.object_id # 5 or anything, but the same
2.id # NoMethodError: undefined method `id' for 2:Fixnum
2.object_id # 5
"anything has object_id".object_id # 22522080
"anything has object_id".object_id # 22447200 - string has different object_id because it's a new instance everytime
所以,僅僅用id
訪問的ActiveRecord類的數據庫標識符。這是由Ruby On Rails爲模型對象創建的。
OR,如果你確實需要有所謂的object_id,那麼你可以創建ActiveRecord的模型這樣的方法數據庫中列:
def general_id
read_attribute(:object_id)
end
這是什麼欄應該是映射到?它是一個外鍵到對象表嗎?
找出你真正想要代表什麼。這可能不是世界上任何一般的東西。 (如果是,也許東西是一個更好的名字。)
如果你在約束條件下工作,你絕對必須有一個object_id
列,你仍然可以參考它直接與attributes[:object_id]
和旁路的Rails的魔術方法。
作爲最後的手段,您可以用自己的#object_id
方法覆蓋該方法,該方法僅從數據庫返回該屬性(這是Rails在#id
方法中所做的)。我想不出任何會使絕對是我的頭頂的,但這可能不是一個好主意。對象ID用於很多雜項,所以如果你做對象比較,使用你的對象作爲散列鍵等,你可能會得到奇怪的行爲。
我有點驚訝Rails沒有創建__object_id__
作爲object_id
的原始形式的參考,如send
具有稱爲__send__
的Ruby變體。
編輯:紅寶石方法__id__
似乎是等效爲object_id
__send__
。使用object_id
作爲您的外鍵的方法可能是安全的,或者它可能不是。我目前的工作中並沒有使用Rails。
'__send__'別名不是Rails的東西,它是Ruby的核心方法。它的RDoc甚至聲明:_「如果'send'與** obj中的現有方法發生衝突,則可以使用'__send__' **這是比原始發佈者在'object_id'上發生衝突更常見的情況 - 如果他想要的話,他可以輕易地做出這樣的別名。 – SFEley 2011-03-10 07:46:57
- 1. Facebook Graph API。什麼是我的域名的object_id?
- 2. 這個字段的名字是什麼?
- 3. jQuery寫什麼是寫在一個字段到另一個DIV
- 4. 命名空間的另一個含義是什麼?
- 5. 這個角色的名字是什麼?
- 6. 這個UIControl的名字是什麼?
- 7. 這個元素的名字是什麼?
- 8. 這個界面的名字是什麼?
- 9. 這個算法的名字是什麼?
- 10. 這個班的名字是什麼?
- 11. 鍵(和一些其他對象)的object_id總是相同的。這是爲什麼?
- 12. 什麼是一個字典轉換爲另一種
- 13. 一個簡單包含mixin的類的名字是什麼?
- 14. 這個「scroller」是什麼名字?
- 15. 你給一個方法最荒謬的名字是什麼?
- 16. 這是什麼名字?
- 17. 爲什麼`Fixnum`的`object_id`是一個奇數?一個<code>Fixnum</code>的
- 18. 爲什麼@SequenceGenerator有一個名字?
- 19. OBJECT_ID在SQL Server中做什麼?
- 20. 爲什麼照片表(fql)中的object_id和圖表api中的object_id不同?
- 21. 爲什麼2個相同的字符串在Ruby中具有相同的object_id?
- 22. 爲什麼一個使用toWidget的工作,另一個不是
- 23. 這是一種模式,如果是,它的名字是什麼?
- 24. 爲什麼在檢查表是否存在時使用OBJECT_ID
- 25. 在類定義上調用object_id是什麼?
- 26. 過濾記錄的過濾器的另一個名稱是什麼?
- 27. 檢查另一個字符串是否存在的最佳方法是什麼?
- 28. 什麼是這個標誌{0}的名字,這是什麼意思?
- 29. 什麼是低半字節,爲什麼結果是不同的一個數字
- 30. QGLWidget在另一個線程?什麼是文件指的是?
嗯..「thinger」怎麼樣? – mrcrowl 2011-03-10 04:15:35
請告訴我你沒有'class Object
2011-03-10 22:42:40