【发布时间】:2014-12-20 16:19:38
【问题描述】:
我有一个有很多客户的用户模型。用户模型有一个整数属性eft_percent,客户有一个布尔属性eft。当创建此用户的客户时,我需要更新 users eft_percent 属性。这是我现在的代码:
after_action :calculate_eft, only: [:create]
def create
@customer = Customer.new(customer_params)
if @customer.save
flash[:notice] = 'Customer created'
redirect_to customers_url
else
flash[:alert] = 'Error creating customer'
redirect_to new_customer_url
end
end
private
def calculate_eft
@user = User.find(@customer.user_id)
@user.eft_percent = @user.customers.where(eft: true).count * 100 / @user.customers.count
@user.save
end
当我创建一个客户时,用户的 eft_percent 属性没有改变。感谢所有帮助!
【问题讨论】:
-
不应该调用@user.save 作为calculate_eft 中的最后一行来将新值保存到数据库中吗?
-
我试过它不起作用(我想我在帖子中提到过)。我想知道我是否需要做 update_attributes 什么的。
-
如果您从以下位置打印值,您是否得到正确的结果:'@user.customers.where(eft: true).count * 100 / @user.customers.count'?
-
我更改了帖子以反映@user.save。同样,它不起作用。用户 eft_percent 没有改变。
-
是的,我可以将代码放在用户显示视图中并且它可以工作,但是我有一堆属性我需要做同样的事情,所以我需要让他们成为用户属性,所以我不必在每次加载视图时都计算所有这些。如果在创建客户时完成计算,则可以节省加载视图时必须即时执行的时间。
标签: ruby-on-rails