2011-03-10 45 views
0

我有一個代碼,它以不同的方式計算創建操作和更新操作中的參數。這裏expiry_time是db中的列,expiry_duration是一個虛擬參數。如何將此代碼轉換爲模型?

class SomeController 
    def create 
    params[:model][:expiry_time] = Time.now + params[:model][:expiry_duration].to_i 
    @model = Model.new(params[:model]) 
    if @model.save 
     redirect_to .. 
    else 
     render .. 
    end 
    end 

    def update 
    @model = Model.find(params[:id]) 
    params[:model][:expiry_time] = @model.created_at + params[:model][:expiry_duration].to_i 
    if @model.update_params(params[:model]) 
     redirect_to .. 
    else 
     render .. 
    end 
    end 
end 

我正在考慮將計算部分移到before_save函數中進行建模。我應該檢查那裏的身份證以確定它是新記錄還是現有的記錄?

class Model 
    before_save :update_expiry_time 

    def update_expiry_time 
    start_time = id ? created_at : Time.now 
    expiry_time = start_time + expiry_duration.to_i 
    end 

    def expiry_duration 
    expiry_time - created_at 
    end 
end 

您怎麼看?

回答

3

使用new_record?或使用:on => :create來調用不同的功能

相關問題