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?
答案 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