2013-04-06 63 views
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

一般來說,如果你需要把它保存到數據庫中稍前從什麼用戶在表單中輸入的更改數據,你可以在Rails的使用ActiveRecord callbacksbefore_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 

其保存到數據庫之前,這將始終運行在一個Event實例set_repeat私人回調方法,如果它是目前在字符串中的一個改變repeat屬性['none', 'daily', 'monthly', 'yearly'](但你應該根據需要調整這個邏輯 - 我只是猜你想要什麼)。

所以我想看看ActiveRecord callbacks作爲修改模型屬性的一般方法,然後再保存它們。

1

我想我可以在我的Event模型中使用ActiveRecords回調。具體如下:

before_save do 
    self.repeat = Event.rule(self.date, self.repeat) 
    end 
+1

什麼'Event.repeat'返回?如果不是'self.repeat'? – 2013-04-07 08:12:47

+0

是的,謝謝)我的錯誤 – Gabi 2013-04-07 08:29:24

相關問題