2014-12-19 66 views
1

我有一個擁有許多客戶的用戶模型。用戶模型具有整數屬性eft_percent,並且客戶具有布爾屬性eft。我需要用戶eft_percent屬性在創建此用戶的客戶時進行更新。這裏是我的代碼現在:Rails從不同模型更新一個模型屬性創建動作

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

你不應該叫@ user.save在calculate_eft最後一行堅持新值到數據庫? – cristian

+0

我試過它不起作用(我想我在帖子中提到過)。我想知道如果我需要做update_attributes什麼的。 –

+0

如果您打印來自'@ user.customers.where(eft:true).count * 100/@ user.customers.count'的值,您會得到corect結果嗎? – cristian

回答

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}) 
+0

我只需要更新這個客戶所屬的用戶,這個代碼並沒有定義哪個用戶被更新的權利?我將如何更新客戶所屬的特定用戶屬性? –

+0

'user'是'current_object.user'('self.user')的縮寫,因爲模型'belongs_to:user'。它只會更新客戶所屬的用戶。 –

+0

這工作!非常感謝! –

相關問題