2013-07-31 77 views
0

Supose,我有下面的類:私人/保護的訪問器屬性在軌道4,5

class Foo < ActiveRecord::Base 
    belongs_to :bar 
end 

在軌控制檯我可以這樣做:

foo = Foo.new 
foo.bar_id = 3 

但是,這可能違反了封裝的原則。我認爲這是更好的主意做:

foo = Foo.new 
foo.bar = Bar.find(3); 

而且bar_id應該是私人/保護。 這與mass assignmentstrong parameters無關,但它也是一個安全問題。

有什麼辦法可以設置爲私有的一些屬性?

回答

0

我不認爲只是讓寫訪問私有或保護將可靠地防止通過update_attribute或質量分配的變化。

雖然它本身並不是「私人」,但您可以通過設置屬性read_only來獲得所需的效果,例如,

attr_readonly :bar_id

,如果你確實需要更新的價值 「私人-LY」,訪問它作爲@bar_id。根據文檔,「以只讀方式列出的屬性將用於創建新記錄,但更新操作將忽略這些字段。」