技术开发 频道

精通 Grails: 使用 Ajax 实现多对多关系

  城市还是机场?

  现在将 City 添加到代码中 — 或许不用添加。尽管您可能会说,“飞往芝加哥” 理论上讲是飞往一个机场。我是飞往芝加哥的 O'Hare 机场还是 Midway 机场?当我飞往纽约时,是飞往 LaGuardia 还是 JFK?显然我需要一个 Airport 类来替代简单的 City 字段。清单 5 展示了 Airport 类:

  清单 5. Airport 类

class Airport{
  static hasMany
= [flights:Flight]
  
String name
  
String iata
  
String city
  
String state
  
String country
}

  在清单 5 中可以看到,iata 字段又回来了。这次 DEN 表示 Denver International Airport,ORD 表示 Chicago O'Hare,MDW 表示 Chicago Midway,等等。您也许想创建一个 State 类并设置一个简单的 1:m 关系,或者甚至创建一个 Location 类来封装 city、state 和 country。我将把这个困难的任务留给您自己来完成。

  现在我将 Airport 添加到 Flight 类,如清单 6 所示:

  清单 6. 将 Airport 关联到 Flight

class Flight{
  static belongsTo
= [trip:Trip, airline:Airline]
  
String flightNumber
  
Date departureDate
  Airport departureAirport
  
Date arrivalDate
  Airport arrivalAirport
}

  但是,这一次我显式地创建 departureAirport 和 arrivalAirport 字段,而不是隐式地使用 belongsTo 字段。用户界面看起来没有任何不同 — 这些字段都将使用组合框来显示 — 但是类之间的关系稍微有些不同。删除一个 Airport 不会连带删除相关联的 Flight,而删除一个 Trip 或 Airline 则会删除相关联的 Flight。我在此处提供了两种方法,以说明将各种类关联起来的不同方式。实际上,您可以自己决定是否希望类保持严格的引用完整性(换句话说,所有删除操作都是级联的)或者允许更松散的关系。

0
相关文章