Rails从不同模型更新一个模型属性创建动作

时间:2014-12-19 21:50:04

标签: ruby-on-rails

我有一个拥有众多客户的用户模型。用户模型具有整数属性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属性不会更改。感谢所有帮助!

1 个答案:

答案 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})