保存前访问rails模型中的date_select

时间:2013-06-28 01:43:12

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

Rails 3.2.8

在模型中,我无法访问表单中收集的start_date

# form
<div class="field">
  <%= f.label :start_date %><br />
  <%= f.date_select :start_date %>
</div>
<div class="field">
  <%= f.label :total_months %><br />
  <%= f.number_field :total_months %>
</div>


# model
attr_accessible :expire_date, :start_date, :total_months

def total_months=(total)
  write_attribute :expire_date, start_date + 3.months
end

我收到nil错误,因为start_date返回nil。如何以日期格式获取start_date?

1 个答案:

答案 0 :(得分:1)

您的方法仅覆盖total_months属性的set方法,并且您不知道是否在设置start_date属性之前或之后设置该方法(可能不会按顺序进行设置)在视图中给出)。尝试在write_attribute :expire_date, start_date + 3.months回调中执行before_save

类似于:

before_save :do_before_save

def do_before_save
  self.expire_date = start_date + 3.months if start_date
end