2010-12-09 117 views
0

在我的模型我說:Ruby on Rails的覆寫默認存取

def dag 
    'test' 
end 

但當我循環中的所有記錄,並使用

f.text_field :dag 

我還沒有得到的"test"值...我從數據庫中獲得價值。我如何覆蓋窗體的默認getter?我的作品,當我說

Model.dag # returns 'test' 

回答

1

雖然你的例子並不表明這一點,你定義DAG爲一類方法而不是一個實例方法? Model.dag暗示它是一種不是你想要的類方法。

+0

不,我的意思是「Model.first.dag」。這是一個實例方法。我想覆蓋f.text_field:dag,並在我的respond_to:xml中進行覆蓋 – Alexander 2010-12-09 13:30:08

0

如果您可以給我們多一點代碼,找到正確的答案會更有用。

說了這麼一句,我懷疑你已經宣佈你的方法是dag保護或私有方法。 看一看,如果有一個private(或protected)keywork型號的代碼dag方法聲明之上:如果是這樣,該方法是私有的(或保護),所以它不能被模板訪問...

0

類:

class DenLangeKamp < ActiveRecord::Base 
    belongs_to :liga, :class_name => "DenLangeLiga" 

    DAYS = { "Man" => 1, "Tir" => 2, "Ons" => 3, "Tor" => 4, "Fre" => 5, "Lør" => 6, "Søn" => 7 } 

    def dag 
    DAYS.invert[reader_attribute(:dag)] 
    end 

    def dag=(dag) 
    write_attribute(:dag, DAYS[dag]) 
    end 
end 

,然後形式如下:

......... 
<% liga_form.fields_for :kampe do |kamp_form| %> 
    <tr> 
    <td><%= kamp_form.text_field :dag %></td> 
......... 

我節省了一天作爲一個數據庫中的號碼,這樣我就可以在當天進行排序。 「dag」是英文中的「day」。

當我說「DenLangeKamp.first.dag」時,我得到正確的回報(如「Man」,「Tir」等)但是在表單中,我正在獲取該數字!所以它看起來並不像它實際上正確地「覆蓋」getter方法。

0

我有同樣的問題。重寫的函數似乎在索引和顯示上工作,但在編輯中,表單未使用重寫函數。它似乎正在繞過重寫的函數獲得不同的方式。

相關問題