我有一个拥有众多客户的用户模型。用户模型具有整数属性eft_percent,并且客户具有布尔属性eft。我需要用户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属性不会更改。感谢所有帮助!
答案 0 :(得分:3)
这看起来更像是控制器而不是模型。所以,这是一个模型行为,因此,它应该在模型中:
customer.rb:
belongs_to :user
after_create {
newval = user.customers.where(eft: true).count * 100 / user.customers.count
user.update_attribute(:eft_percent, newval)
end
要更新更多属性,只需传递哈希即可。小心不要混淆用户和客户。哈希应仅包含用户属性
user.update_attributes({attr1: val1, attr2: val2})
或
user.update_columns({attr1: val1, attr2: val2})