저는 ROR을 처음 사용하고 있으며화물 추적 프로젝트 작업을하고 있습니다. 아이디어는 선적 위치에 대한 모든 변경 사항을 기록하여 사용자가 추적 번호로 선적을 추적 할 때 현재 위치와 통과 된 내역을 볼 수 있도록하는 것입니다.레일 : 테이블 삽입/업데이트에 대한 감사 구현
나는 shipments 테이블과 shipment_locations 테이블을 가지고 있습니다.
선적
+--------------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | start_address_id | int(11) | YES | | NULL | | | end_address_id | int(11) | YES | | NULL | | | transportation_agency_id | int(11) | YES | MUL | NULL | | | customer_id | int(11) | NO | MUL | NULL | | | status_id | int(11) | NO | MUL | NULL | | | cargo_id | int(11) | YES | MUL | NULL | | | tracking_number | varchar(255) | NO | MUL | NULL | | | mode_of_transport_id | int(11) | YES | MUL | NULL | | | expected_start_date | date | YES | | NULL | | | actual_start_date | date | YES | | NULL | | | expected_end_date | date | YES | | NULL | | | actual_end_date | date | YES | | NULL | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | | admin_user_id | int(11) | YES | MUL | NULL | | +--------------------------+--------------+------+-----+---------+----------------+
shipment_locations :
+------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | shipment_id | int(11) | NO | MUL | NULL | | | current_location | varchar(255) | YES | | NULL | | | final_location | text | YES | | NULL | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | +------------------+--------------+------+-----+---------+----------------+
Shipment_history이 (제안)
필드 (위치 업데이트 (CURRENT_LOCATION)에서,이 테이블에 완료)
- ID
- 내가이 기록 테이블에 shipment_locations 테이블의 모든 업데이트를 저장하고 싶은
updated_at
Time (Updated_at):----------------------------> Location:(current_location)
1/12/2012 11:30 222 John st.
1/12/2012 13:00 555 Paul st.
1/13/2012 07:30 final_location
컨트롤러에서 어떻게 이것을 수행하여 하나의 업데이트 작업 만 기록 테이블에 저장되도록 할 수 있습니까?
UPDATE :
나는이 트리거를 사용하여 배송 추적 로그를 얻을 수있었습니다, 감사 vladr
DELIMITER $$
DROP 트리거 업데이트 후 트리거 shipment_after_update
을 만들 shipment_after_update
$$
on shipments
각 행에 대해 BEGIN INSERT INTO cargo_transit_histories (shipment_id
, current_location
, final_location
, updated_at
) VALUES (NEW.id, NEW.current_location, NEW.final_location, NOW()); END $$
DELIMITER;
또한 (1) 데이터베이스 트리거 사용, (2) * 버전 관리 * 등의 장단점을 별도의 감사 테이블 대신 사용하는 것이 좋습니다 – vladr
감사합니다. vladr 감사합니다. 트리거 사용에 대한 조사를 이것을하는 더 청결한 방법. 하지만 트리거를 사용하면 별도의 테이블이 있어야합니다. – Andy7
트리거를 사용하면 트리거 내부에서 원하는 모든 작업을 수행 할 수 있습니다. 또한 http://stackoverflow.com/questions/5346367/object-versioning-in-rails-like-papertrail-but-individual-tables 및 http://stackoverflow.com/questions/1697456/versioning-of-models를 참조하십시오. -in-ruby-on-rails – vladr