2016-12-05 46 views
0

我試圖在保存記錄時在表列中添加一個唯一的值。生成一個代碼失敗afterr_save在軌道上回調

假設我的表具有3個字段:< JOB_CODE>

以我POST請求我發送以下有效載荷:
{ 「CUSTOMER_ID」: 「123」, 「CUSTOMER_NAME」: 「周杰倫」}

如果此記錄保存到數據庫。然後我需要更新Job_Code列,使用生成的代碼如JOB_123_458,其中458是記錄的唯一ID。

我正在試圖在Active Class上使用after_save回調並更新其上的新值。

我使用下面的方法:

after_save :update_job_code 

def update_job_code 
    update_column(:job_code, "JOB_" + :customer_id + "_" + :id) 
end 

但我不能能夠發電的JOB_<Customer_id>_<Newly Created Job Id>

格式的作業代碼讓我知道如何生成相關格式工作碼在活動記錄after_save回撥

+0

問題是什麼?你如何在模型中訪問'params [:customer_id]'? – dp7

+0

呵呵,「讓我知道」?我不認爲這是尋求幫助的方式。但那個IMO。 – Roger

+0

在模型中,我需要以上述問題中提到的格式生成作業代碼。所以我的想法是保存對象後。然後獲取id並更新到特定記錄。爲此,我使用':customer_id'將數值「JOB_」與':customer_id'串聯起來,這些值不是concatinating – nifCody

回答

1

:customer_id:id只是符號。你想要的是調用記錄的屬性,所以只需刪除冒號。

最好使用string interpolation,所以不要創建多個字符串,而只需創建一個字符串。

def update_job_code 
    update_column(:job_code, "JOB_#{customer_id}_#{id}") 
end 
+0

我們是否能夠在創建update_column方法時檢查validation_of_uniqueness – nifCody

+0

ah no。 'update_column'只會觸發一個sql,不會調用驗證和回調函數。因爲'job_code'只是'customer_id'和'id'的組合,只需對這2列進行唯一性驗證即可。 – jvnill

1
after_save :update_job_code 

def update_job_code 
    p customer_id.inpsect # to see customer id in log for debug 
    update_column(:job_code, "JOB_" + customer_id + "_" + id) unless job_code.present? 
end 

只是刪除:這對符號的定義,要真正地CA ll屬性。