gpt4 book ai didi

mysql - rails : implement auditing of table insertions/updates

转载 作者:行者123 更新时间:2023-11-29 01:04:03 24 4
gpt4 key购买 nike

我是 ROR 的新手,正在从事 cargo 跟踪项目。我们的想法是记录装运位置的所有更改,以便当用户使用跟踪号跟踪他们的装运时,他们会看到当前位置和经过位置的历史记录。

我有一个 shipment 表和一个 shipment_locations 表。

  1. 出货量

    +--------------------------+--------------+------+-----+---------+----------------+
    | 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 | |
    +--------------------------+--------------+------+-----+---------+----------------+
  2. shipment_locations:(位置更新在此表上完成,在(current_location)下)

    +------------------+--------------+------+-----+---------+----------------+
    | 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 | |
    +------------------+--------------+------+-----+---------+----------------+
  3. Shipment_history(建议)

    字段:

    • 编号
    • 装运编号
    • 当前位置
    • 创建于
    • 更新时间

我想将 shipment_locations 表中的所有更新存储到此历史表中,以便用户可以获得:

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

如何从 Controller 实现这一点,以便只有一个更新操作保存到历史表?

更新:

我能够使用这个触发器获得 cargo 跟踪日志,感谢 vladr

分隔符 $$

删除触发器 shipment_after_update$$

创建触发器 shipment_after_update AFTER UPDATE on shipments对于每一行开始 插入 cargo_transit_histories (shipment_id , current_location , final_location , updated_at ) 值(value)观 (NEW.id, NEW.current_location, NEW.final_location, NOW());结束$$

分隔符;

最佳答案

我不确定我是否理解正确,这是否是一个好方法,但我会尝试。我建议你让 shipment_history 属于 shipment_locations。

因此,如果 shipment_history 具有 shipment_locations_id,您可以使用 after_update 回调来设置您需要的内容。

ShipmentLocations.model:

      #your other code
after_update :track_changes_in_history

def track_changes_in_history
@shipment_history=Shipment_history.where(:shipment_locations_id=>self.id).first_or_create!
@shipment_history.current_location = self.current_location
#so on
end

但是对于您的模型属性,我看不到及时显示其状态的方法。为此,您可能最好单独设置例如 Map location:string 模型,它通过 has_many 声明属于所有其他模型,并且您可以通过排序位置来显示历史状态,这属于这批 cargo 。

关于mysql - rails : implement auditing of table insertions/updates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13544749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com