after_save 콜백을 사용하여 updated_by 열을 current_user로 설정하고 싶습니다. 그러나 current_user는 모델에서 사용할 수 없습니다. 어떻게해야합니까?updated_by 열을 current_user로 설정하는 after_save 콜백
6
A
답변
8
컨트롤러에서 처리해야합니다. 먼저 모델에서 저장을 실행 한 다음 레코드 필드를 성공적으로 업데이트하십시오.
예
class MyController < ActionController::Base
def index
if record.save
record.update_attribute :updated_by, current_user.id
end
end
end
또 다른 대안은 (나는이 하나를 선호) 논리를 래핑 모델에서 사용자 지정 방법을 만드는 것입니다. 내가 touch
만하지 타임 스탬프가 아닌 사용자 ID를 말할 수있는 예를
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
1
위해 나는 지금까지, 시몬 Carletti의 조언에 따라이 monkeypatch을 구현했습니다. 이것에 문제가 있습니까? 이 장치는 장치 번호 current_user
과 함께 작동하도록 설계되었습니다. 다음
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
그리고 create
및 update
방법과 같이 이러한 전화 :
@foo.save_with_user(current_user)
@foo.update_attributes_with_user(params[:foo], current_user)
관련 문제
- 1. 백그라운드 작업 대 after_save 콜백
- 2. 가상 속성이있는 after_save 콜백 레일 3
- 3. update_attributes가 after_save 콜백 (mongomapper + rails3)의 객체를 업데이트하지 못했습니다.
- 4. QTableView : 검색 열을 설정하는 방법
- 5. 레일스 after_save 콜백이 여러 번 호출되었습니다
- 6. after_save 옵저버에 대한 rails 인수
- 7. 런타임시 after_save 콜백을 만드는 방법
- 8. Linq-SQL/ASP.NET MVC의 "콜백"
- 9. after_save 콜백에서 Delayed :: Job을 사용하는 방법?
- 10. 레일에서 after_save 솔루션 사용되지 않음 3
- 11. 다른 모델의 메소드 콜백
- 12. has_many 연결, 중첩 모델 및 콜백
- 13. carrierwave 및 mongoid의 콜백 문제
- 14. JPA 2 콜백 메소드와 엔티티 리스너를 사용하지 않도록 설정하는 방법
- 15. 'alias'키워드를 사용하여 레일스 콜백 구현하기
- 16. 새 컬렉션으로 대체되는 연결의 ActiveRecord 콜백
- 17. django, related_name은 무엇입니까? 프로젝트간에 공유 열을 어떻게 만듭니 까?
- 18. Nhibernate를 사용하여 열거 형 열을 설정하는 방법은 무엇입니까?
- 19. PHP Doctrine : refClass의 추가 열을 설정하는 방법은 무엇입니까?
- 20. CALayer : 애니메이션 종료시 콜백?
- 21. C++ QThread 및 콜백 콜백 함수
- 22. wpf listview의 열을 숨기기
- 23. AudioQueueNewInput 콜백 대기 시간
- 24. 콜백/위임
- 25. WCF의 콜백?
- 26. 콜백 함수
- 27. 콜백 jquery.scrollview.js
- 28. android의 콜백?
- 29. Asp.net 콜백
- 30. 콜백 javacript
한 터치 방식에 대해 : – lucapette
이유를 모델에 넣어위한은 (저장하기 때문에, DRY 때문이다)는 하나의 컨트롤러가 아닌 앱의 여러 위치에서 호출 할 수 있습니다. 차라리 한 번 해보고 내 자신을 반복하지 않아도되고 항상 이것을 기억하는 것에 대해 걱정할 필요가 없습니다. – pixelearth
그런 다음 Model.save_from_user (user)와 같은 새 메서드를 만들고 레코드를 저장하고 터치를 수행하는 논리를 배치하십시오. 그런 다음 컨트롤러에서 단순히 current_user를 인수로 전달하는 메서드를 호출하십시오. –