在我的模特中我说:
def dag
'test'
end
但是当我循环所有记录并使用
时f.text_field :dag
我仍然没有得到"test"
的值...我从数据库中获取了值。如何覆盖表单的默认getter?我说的时候我会工作
Model.dag # returns 'test'
答案 0 :(得分:1)
虽然您的示例没有指出这一点,您是否将dag定义为类方法而不是实例方法? Model.dag意味着它是一个不是你想要的类方法。
答案 1 :(得分:0)
如果您可以再给我们一些代码,那么为您找到正确答案会更有用。
这样说,我怀疑你已经将dag
方法声明为受保护或私有方法。
看看模型代码上的private
方法声明之上是否有protected
(或dag
)关键字:如果是,则该方法是私有的(或受保护的),因此它不能是通过您的模板访问...
答案 2 :(得分: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方法。
答案 3 :(得分:0)
我有同样的问题。重写的函数似乎适用于索引和显示,但在编辑中,表单不使用重写的函数。似乎绕过被覆盖的函数有不同的方式。