4

有一個模型動態添加散列屬性到Rails模型實例對象?

class PlaylistModel < ActiveRecord::Base 
    /* code */ 
end 

,然後在控制器的動作有這樣

PlaylistController < ActionController::Base 
    def a_action 
    @item = Playlist.find(10) 
    @item[:visited] = true  
    end 
end 

代碼然而存在PlaylistModel沒有定義visited屬性(或者在模式爲播放列表表) !它看起來像一個新的屬性被動態添加到對象。這是怎麼回事?定義的所有功能在哪裏?我可以在哪裏閱讀更多信息。

感謝您的幫助!

+0

有趣的是,似乎你可以添加屬性通過說@item [:visited] = true,但是當你鍵入@ item.inspect時,[:visited] = true屬性沒有被列出......但顯然可以通過鍵入@item [:visited] – Abram

+0

屬性編寫器在檢查模型時不一定會公開所有屬性。它只公開定義的列名和通過'attr_accessor','attr_reader'等可訪問的屬性。請參閱我在下面發佈的鏈接。 – PinnyM

回答

9

這是屬性設置快捷鍵,如解釋here。這是相當多的等價於:

@item.attributes[:visited] = true 
+1

所以我寫的並不是真的打算如何使用。正如它打算用於寫入ActiveRecord/dB模式中定義的屬性,但它仍然有效。當您執行@project.save時,它不會被保存到數據庫 – hajpoj

+0

正確的,如果沒有支持該屬性的數據庫列,則只有當對象在內存中時才存在。 – PinnyM

+0

非常感謝清理! – hajpoj