2016-12-05 42 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属性。