2011-08-19 4 views
0

레일스는 created_at 및 updated_at와 같은 열의 값을 자동으로 삽입합니다. 더 많은 열을 업데이트하는 방식으로 레일을 구성 할 수 있습니까? 예를 들어, 모든 테이블에 현재 사용자 값을 보유한 사용자라는 열이 있습니다. 모든 데이터베이스 변경에 대해 기본 사용자를 삽입 할 수 있습니까?레일을 사용하여 테이블에 기본값 삽입

답변

2

질문에 오해하지 않는 한, 모델에서 before_save 함수를 사용해 볼 수 있습니다.

before_save :defaults 

def defaults 
    #some stuff to set your defaults 
end 
1

예, 모델에서 before_filter를 사용할 수 있습니다.

before_update :set_value 

def set_value 
    self.value = "hello" 
end 
+0

을, 당신이 가진 모든 자원을 연결하려는 것으로 보인다 현재 사용자. current_user 아래의 모든 자원을 조사하지 마십시오. 그런 다음 위와 같은 필터를 사용할 필요가 없습니까? – amaseuk

0

당신은 데이터베이스에 객체를 저장하기 전에 같은 상태를 변경할 때 논리를 트리거하기 위해 액티브 콜백을 사용할 수 있습니다. created_at 및 updated_at 열은 객체가 만들어 지거나 (before_create) 업데이트되거나 (before_save) 자동으로 업데이트됩니다. ActiveRecord :: Callbacks 네임 스페이스에 정의 된 클래스 메서드를 사용하여 자체 콜백을 정의 할 수 있습니다. 특별히 업데이트, 생성, 또는 기록을 삭제 한 사용자를 기록하고자하는 경우 예는

# app/models/example.rb 
class Example < ActiveRecord::Base 
    before_save :do_something 

    def do_something 
    self.value = value 
    end 
end 

것, 당신은 몇 가지 작업을 저장하고 자동으로 사용자를 기록 Userstamps 레일 플러그인을 사용할 수 있습니다. 이 플러그인은 https://github.com/delynn/userstamp

# app/models/example.rb 
class Example < ActiveRecord::Base 
    model_stamper 
end 

# app/controllers/application_controller.rb 
class ApplicationController < ActionController::Base 
    include Userstamp 
end 
당신은 사용자 작업을 기록 할에 각 모델 위에 userstamps 열을 추가해야합니다

에 있습니다.

는 액티브 콜백에

더 많은 정보는 여기에서 찾을 수 있습니다 : 타임 스탬프에 http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

정보는 여기에서 찾을 수 있습니다 : 액티브 타임 스탬프 : 더 읽기에 http://api.rubyonrails.org/classes/ActiveRecord/Timestamp.html