2015-10-18 78 views
0

我正在我的客戶表中創建新客戶記錄。但是,除了名字和姓氏之外,我想添加一個「full_name」字段。所以,成功創建記錄(使用參數)後,我嘗試更新新的full_name屬性,但未保存。下面是創建新的記錄代碼:無法將計算字段添加到新記錄中

def create 
    @customer = Customer.new(customer_params) 
    if @customer.save 
     redirect_to customer_index_path 
    else 
     render 'new' # user entered values available in @customer 
    end 
    end 

這裏是我修改代碼來計算的全名和更新記錄:

def create 
    # todo this is not storing full_name 
    fn = params[:first_name].to_s.strip 
    ln = params[:last_name].to_s.strip 
    @customer = Customer.new(customer_params) 
    if @customer.save 
     # construct full name & save (again) before redirecting 
     @customer[:full_name] = fn + ' ' + ln 
     @customer.save 
     redirect_to customer_index_path 
    else 
     render 'new' # user entered values available in @customer 
    end 
    end 

但它不保存FULL_NAME到D b。我究竟做錯了什麼?

在此先感謝。

回答

1

你的代碼應該可以工作。將第二個@customer.save替換爲@customer.save!,並查看該保存是否按預期執行。

我會使用ActiveRecord回調這種行爲。你不應該把太多東西放在你的控制器中。

class Customer < ActiveRecord::Base 
    before_save :set_full_name 

    private 

    def set_full_name 
    self.full_name = "#{first_name} #{last_name}" 
    end 
end 
+0

謝謝,馬格努斯。我仍然不確定爲什麼我的代碼無法正常工作,但您的方法要好得多。我實現了你的建議,向模型中添加代碼,現在它正在工作。謝謝。 –