2011-04-23 2 views
0

나는 다음과 같은 모델을 가지고 : 사용자가 메시지를 기존, 내가 원하는 프로젝트에 추가 될 때마다레일 - after_save - 레코드가/업데이트 작성 또는 삭제되었는지 확인하는 방법에 내 레일 애플 리케이션에서

Messages (id, title, content, project_id) 
MessageViews (id, message_id, view_status) 
Permissions (id, user_id, project_id) 
Projects (id, name) 

프로젝트의 모든 메시지에 대한 MessageView 레코드를 만듭니다.

마찬가지로 사용자의 프로젝트 권한이 삭제되면 해당 프로젝트의 메시지에 연결된 모든 사용자의 messageViews를 삭제하려고합니다. 내 권한 모델에서

은, 지금까지 내가 가진 : 레코드가/업데이트를 작성 또는 삭제되는 경우 check_message_views에서

before_destroy :check_message_views 

    private 

    def check_message_views 
     ..... 
    end 

어떻게 내가 결정할 수 있습니다.

When created/updated, I want to loop through and check 
When deleted, I want to loop through all the project's messages and delete any messageView for that user. 

감사

+0

실제로 사용 권한에서 Messages : Dependent Destory를 통해 : has_many => MessageViews를 사용해야합니까? 단지 삭제 만해도 그렇게 만들 수 있는지 확실하지 않은가요? – AnApprentice

답변

1

MessageView 모델은 Permission에 속하지해야 하는가? 그런 다음 :dependent=>:destroy을 설정하면 모든 것이 자동으로 작동합니다.

그렇지 않으면 destroyed? 메서드를 사용할 수 있습니다.

등가물이 있다고 생각하지 않지만 Permissions 모델의 after_create 콜백에 코드를 삽입 할 수 있습니다. 일관성을 유지하려는 경우 해당 문제에 대한 after_destroy 콜백도 있습니다.

또 다른 종류의 해킹 방법은 모델의 created_at 시간이 updated_at 시간과 같은지 확인하는 것입니다. 그렇다면 생성되었지만 아직 업데이트되지 않았습니다.

관련 문제