2013-04-06 61 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

相关问题