2011-08-23 20 views

cevap

8

Denetleyicide tutmanız gerekir. Önce, modeldeki kaydetme işlemini yapın, ardından kayıt alanını başarılı bir şekilde güncelleyin.

Örnek

class MyController < ActionController::Base 
    def index 
    if record.save 
     record.update_attribute :updated_by, current_user.id 
    end 
    end 
end 

diğer alternatif (Bunu tercih ederim) mantığı sarar Modelinizdeki özel bir yöntem oluşturmaktır. Ben touch sadece does damgalarını kullanıcılar değil, kimliği söyleyebilirdi Örneğin

class Record < ActiveRecord::Base 
    def save_by(user) 
    self.updated_by = user.id 
    self.save 
    end 
end 

class MyController < ActionController::Base 
    def index 
    ... 
    record.save_by(current_user) 
    end 
end 
+0

+1 dokunmatik yöntemi için :) – lucapette

+0

nedeni modelinde koyarak için (Kaydet beri, KURU olmasıdır) sadece bir kontrolör değil, uygulamada birçok yerden çağrılabilir. Bunu bir kez yapmayı ve kendimi tekrar etmemeyi ve bunu yapmayı her zaman hatırlamaktan endişe etmeyi tercih ederim. – pixelearth

+0

Ardından, Model.save_from_user (kullanıcı) gibi yeni bir yöntem oluşturun ve kaydı kaydetmek ve dokunuşu gerçekleştirmek için mantığı yerleştirin. Ardından, kontrolörünüzde bu yöntemi “current_user” parametresini argüman olarak geçirin. –

1

ben kadarıyla, Simone Carletti'nin tavsiyesi dayalı bu monkeypatch uyguladık. Bununla ilgili yanlış bir şey var mı? Bu, current_user numaralı cihazla çalışmak üzere tasarlanmıştır. Sonra

class ActiveRecord::Base 
    def save_with_user(user) 
    self.updated_by_user = user unless user.blank? 
    save 
    end 

    def update_attributes_with_user(attributes, user) 
    self.updated_by_user = user unless user.blank? 
    update_attributes(attributes) 
    end 
end 

Ve create ve update yöntemleri şöyle bu çağrı:

@foo.save_with_user(current_user) 
@foo.update_attributes_with_user(params[:foo], current_user)