2

私はフォームを持っています:

<%= form_for(@event) do |f| %>
  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>

  <div class="field">
    <%= f.label :date %><br />
    <%= f.text_field :date %>
  </div>

  <div class="field">
    <%= f.label :repeat %><br />
    <%= repeat_types = ['none', 'daily', 'monthly', 'yearly'] 
        f.select :repeat, repeat_types %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

「繰り返し」フィールドに変更されたデータを次のように保存する必要があります。

:repeat = Event.rule(:date,:repeat)

データベースに保存する前に、繰り返しフィールドをどこでどのように変更できますか?

4

2 に答える 2

4

一般に、ユーザーがフォームに入力したデータをデータベースに保存する前に少し変更する必要がある場合は、Rails でなどのActiveRecord コールバックbefore_saveを使用して変更できます。たとえば、次のような場合があります。

class Event < ActiveRecord::Base
  before_save :set_repeat

  private
  def set_repeat
    self.repeat = Event.rule(date, repeat) if ['none', 'daily', 'monthly', 'yearly'].include? repeat
  end
end

これは、インスタンスをDBに保存する前に常にset_repeatプライベートコールバックメソッドを実行し、現在の文字列の1つである場合は属性を変更します(ただし、必要に応じてこのロジックを調整する必要があります-私はあなたが望むかもしれないものを推測しました)。Eventrepeat['none', 'daily', 'monthly', 'yearly']

したがって、モデル属性を保存する前に変更する一般的な方法として、ActiveRecord コールバックを検討します。

于 2013-04-07T08:08:04.003 に答える
1

Event モデルで ActiveRecords コールバックを使用できることがわかりました。次のように:

  before_save do
    self.repeat = Event.rule(self.date, self.repeat )
  end
于 2013-04-07T08:07:52.707 に答える