2012-02-11 19 views
0
返回

所以我有一個例子,我在一些閱讀,我們在鐵軌模型中定義試圖瞭解語法上我們如何引用多數民衆贊成由ActiveRecord的

has_many :some_tablename 

再後來碰到他們說引用它一個Ruby符號

if some_tablename.empty? 
    #do something 
end 

我是新來的Ruby,所以魔法不是很清楚,我爲什麼我不會做

if :some_tablename.empty? 
    #do something 
end 

現在,我明白可以在多種類型上調用.empty,Symbol不是其中之一。所以,我期待答案將會是......類似於.inspect或.to_s被調用的符號:some_tablename(幕後)並返回一個字符串表示,然後我們調用.empty在上面。

是否正確,或者是否有人可以設置我如何排隊:some_tablename to some_tablename?

回答

2

ActiveRecord廣泛使用Ruby作爲元編程語言來執行您可以在模型上進行的大部分查詢。

當你調用if some_table要調用some_table方法,其實簡化版,存在,所以ActiveRecord::Basemethod_missing方法被調用(如果您的模型擴展它),它看起來在屬性這是建立與has_many哈希,belongs_to指令,然後針對缺少的方法構建查詢,特別是您的案例中的內部聯接,因爲some_tablehas_many

檢查http://apidock.com/rails/ActiveRecord/Base/method_missing

+0

謝謝,我忘了關於missing_method以及如何使用它。所以我可以想象ActiveRecord在後臺可能會做什麼。 – pghtech 2012-02-11 16:04:36

1

給符號前has_many方法只是定義一個關係,由關係動態生成的方法使用該名稱,但不直接生成您提供的符號。作爲參考,符號是與字符串差不多的,除了它們是不可變的和有效的內存(它們是單例,所以它們只在內存中使用一次,不管它們使用的頻率如何)

有關更多信息關係:http://guides.rubyonrails.org/association_basics.html

相關問題