无法将计算字段添加到新记录
cannot add computed field to new record
我正在我的客户 table 中创建新的客户记录。但是,除了名字和姓氏之外,我还想添加一个 "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 保存到数据库。我做错了什么?
提前致谢。
您的代码应该可以工作。将第二个 @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
我正在我的客户 table 中创建新的客户记录。但是,除了名字和姓氏之外,我还想添加一个 "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 保存到数据库。我做错了什么?
提前致谢。
您的代码应该可以工作。将第二个 @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