我已经就此问了一个类似的问题,但是在看到使用textfields的railscast之后--Ryan建议使用虚拟属性。
我已经使用虚拟属性设置我的模型,如下所示:
attr_accessible :title, :description, :start, :start_string
def start_string
unless start.nil?
start.to_s(:db)
end
end
def start_string(start_str)
self.start = Date.parse(start_str)
rescue ArgumentError
@start_invalid = true
end
def validate
errors.add(:start, "is invalid") if @start_invalid
end
我已将此包含在我的编辑视图中,如下所示:
<div class="field">
<%= f.label :start_string %> <br />
<%= f.text_field :start_string %>
<%#= f.date_select(:start, :order => [:month, :day, :year], :end_year => Time.now.year + 10) %>
</div>
但是,加载我的编辑表单时出现错误
wrong number of arguments (0 for 1)
我也知道这是一个非常古老的railscast和有人事件评论:
“正如Rayn提到的,如果你添加nil?请检查getter方法,它应该很好!”
没有。该代码已过时,可供今天使用。有更有效的方法 现在就这样做
那么现在这样做的正确方法是什么?看起来像一个简单直接的方式来做...如果我没有收到错误!
答案 0 :(得分:1)
你的第二种方法应该是def start_string=(start_str)
(你错过了等号)。