0

とのStaff2つの属性しかないモデルがあるとしましょう。namehours

私は以下のようなフォームを持っています、ここでstartfinishは仮想属性です:

<%= 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の違いです)。finishstart

私の質問はhours、データベースを計算して保存するための最良のアプローチは何ですか?モデルにメソッドを作成する方法がありますか、それともコントローラーのアクションでStaff計算を行う必要がありますか?createupdate

4

1 に答える 1

3

適切な方法は、モデルでそれを実行し、before_saveまたはbefore_createコールバックを作成することです。このようなものを試してください:

before_save :set_hours

def set_hours
  self.hours = finish - start
end

お役に立てれば。

于 2013-01-23T16:11:09.920 に答える