具有虚拟属性的文本字段中的日期

时间:2012-01-04 15:38:30

标签: ruby-on-rails ruby-on-rails-3

我已经就此问了一个类似的问题,但是在看到使用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方法,它应该很好!”

     

没有。该代码已过时,可供今天使用。有更有效的方法   现在就这样做

那么现在这样做的正确方法是什么?看起来像一个简单直接的方式来做...如果我没有收到错误!

1 个答案:

答案 0 :(得分:1)

你的第二种方法应该是def start_string=(start_str)(你错过了等号)。