假设我的模型Staff
只有两个属性:name
和hours
。
我有一个如下所示的表单,其中start
和finish
是虚拟属性:
<%= form_for(@staff) do |f| %>
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :start %><br />
<%= f.text_field :start %>
<div class="field">
<%= f.label :finish %><br />
<%= f.text_field :finish %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
在我的数据库中,我想保存name
和hours
(hours
是finish
和start
之间的差异。
我的问题是:在我的数据库中计算和保存hours
的最佳方法是什么?有一种方法可以在Staff
模型上创建方法,或者我需要在我的控制器的create
和update
操作中进行计算?
答案 0 :(得分:3)
正确的方法是在模型中执行此操作并进行before_save
或before_create
回调。尝试这样的事情:
before_save :set_hours
def set_hours
self.hours = finish - start
end
希望这有帮助。