Ruby on rails RubyonRails覆盖默认访问器
在我的模型中,我说:Ruby on rails RubyonRails覆盖默认访问器,ruby-on-rails,ruby,model,Ruby On Rails,Ruby,Model,在我的模型中,我说: def dag 'test' end 但是当我循环所有的记录和使用 f.text_field :dag 我仍然没有得到“test”的值。。。我从数据库中获取值。如何覆盖表单的默认getter?我说的时候就工作 Model.dag # returns 'test' 虽然您的示例没有指出这一点,但您是否将dag定义为类方法而不是实例方法?Model.dag意味着它是一个类方法,而不是您想要的。如果您能给我们多一点代码,为您找到正确的答案会更有用 这么说吧,我怀疑您已经
def dag
'test'
end
但是当我循环所有的记录和使用
f.text_field :dag
我仍然没有得到“test”
的值。。。我从数据库中获取值。如何覆盖表单的默认getter?我说的时候就工作
Model.dag # returns 'test'
虽然您的示例没有指出这一点,但您是否将dag定义为类方法而不是实例方法?Model.dag意味着它是一个类方法,而不是您想要的。如果您能给我们多一点代码,为您找到正确的答案会更有用 这么说吧,我怀疑您已经将
dag
方法声明为受保护或私有方法。
查看模型代码上的dag
方法声明上方是否有private
(或protected
)键:如果是,则该方法为private(或protected),因此模板无法访问它…类:
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
class-DenLangeKamp“DenLangeLiga”
天={“人”=>1天,“Tir”=>2天,“Ons”=>3天,“Tor”=>4天,“Fre”=>5天,“Lør”=>6天,“Søn”=>7天}
def dag
天数.反转[读卡器属性(:dag)]
结束
def dag=(dag)
写入_属性(:dag,天[dag])
结束
结束
然后表单看起来像这样:
.........
<% liga_form.fields_for :kampe do |kamp_form| %>
<tr>
<td><%= kamp_form.text_field :dag %></td>
.........
。。。。。。。。。
.........
我将日期保存为数据库中的一个数字,以便按日期排序。“dag”在英语中是“day”
当我说“DenLangeKamp.first.dag”时,我得到了正确的回报(如“Man”、“Tir”等),但在形式上,我得到的是数字!因此,它似乎并没有正确地“覆盖”getter方法。我也有同样的问题。被重写的函数似乎可以用于索引和显示,但在编辑中,表单没有使用被重写的函数。它似乎以一种不同的方式绕过被重写的函数。不。我的意思是“Model.first.dag”。它是一个实例方法。我想覆盖f.text_字段:dag,并在响应时覆盖:xml