Grails 连接数据库字段
Grails connect database fields
我正在尝试学习 Grails,但仍处于初学者水平。
我做了一个很小的应用程序,基本上你可以在其中添加事件,人们可以写关于它们的评论并给它们打分。
所以我有一个 eventController 和 reviewController。评分只是评论中的一个整数。但现在我想显示一个事件的总体评分。所以事件评分应该是相应评分值的平均值。
这是我最初设置评级的事件域代码,我省略了约束和 toString:
class Event {
Double dRating = 2
static hasMany = [ratings:Rating]
}
控制器很简单:
class EventController {
def scaffold = Event
}
评级域文件:
class Rating {
String comment
java.util.Date date = new java.util.Date()
Integer rating
Event event
}
评级控制器是:
class RatingController {
def scaffold = Rating
}
希望我没有犯错,我不得不翻译变量名以便它们易于理解。
我猜想在 dRating 设置的地方,我可以以某种方式添加一些计算,但我什至不知道如何访问评级的值,我尝试的一切都以大量错误告终,不得不一次又一次地重新启动应用程序。我尝试在控制器中添加计算,但我不知道如何将值导入数据库。那么我实际上应该把逻辑放在哪里,我如何访问这些值?
如果其他文件重要,请告诉我。
希望得到一些关于如何开始做这件事的提示,我没想到会这么难。
首先我会建议开始阅读 grails 文档。稍后从您的问题中不太清楚您在问什么,可能有几个地方或可能在域字段中设置值并将其保存到数据库中。我说的都是我所知道的:
如果它是需要应用于您的 dRating 字段的广义计算,则创建一个具有标准 bean 命名约定的 setter 并在那里执行此操作。例如,您想从 1000 中找到百分比,然后将其添加到 dRating
class Event {
static hasMany = [ratings:Rating]
Double dRating
void setDRating(Double value){
this.dRating = value * 100/1000 // alternatively value /10
}
}
在 commandObject 中执行:如果您不想将某些计算和验证放在域中,则将它们放在命令对象中。参见 this。您可以在任何时候通过 .properties 绑定机制将命令对象的值分配给域对象。例如,
yourDomainObject.properties = yourcommandObjectObject.properties
记住具有相同名称的属性将被绑定。
Do it in service: 你可以在服务方法中做你的计算,把那个服务注入你的控制器然后调用那个方法来执行计算,甚至也坚持到数据库。请记住,服务默认是事务性的。
希望对您有所帮助!
我正在尝试学习 Grails,但仍处于初学者水平。 我做了一个很小的应用程序,基本上你可以在其中添加事件,人们可以写关于它们的评论并给它们打分。 所以我有一个 eventController 和 reviewController。评分只是评论中的一个整数。但现在我想显示一个事件的总体评分。所以事件评分应该是相应评分值的平均值。
这是我最初设置评级的事件域代码,我省略了约束和 toString:
class Event {
Double dRating = 2
static hasMany = [ratings:Rating]
}
控制器很简单:
class EventController {
def scaffold = Event
}
评级域文件:
class Rating {
String comment
java.util.Date date = new java.util.Date()
Integer rating
Event event
}
评级控制器是:
class RatingController {
def scaffold = Rating
}
希望我没有犯错,我不得不翻译变量名以便它们易于理解。
我猜想在 dRating 设置的地方,我可以以某种方式添加一些计算,但我什至不知道如何访问评级的值,我尝试的一切都以大量错误告终,不得不一次又一次地重新启动应用程序。我尝试在控制器中添加计算,但我不知道如何将值导入数据库。那么我实际上应该把逻辑放在哪里,我如何访问这些值?
如果其他文件重要,请告诉我。
希望得到一些关于如何开始做这件事的提示,我没想到会这么难。
首先我会建议开始阅读 grails 文档。稍后从您的问题中不太清楚您在问什么,可能有几个地方或可能在域字段中设置值并将其保存到数据库中。我说的都是我所知道的:
如果它是需要应用于您的 dRating 字段的广义计算,则创建一个具有标准 bean 命名约定的 setter 并在那里执行此操作。例如,您想从 1000 中找到百分比,然后将其添加到 dRating
class Event { static hasMany = [ratings:Rating] Double dRating void setDRating(Double value){ this.dRating = value * 100/1000 // alternatively value /10 } }
在 commandObject 中执行:如果您不想将某些计算和验证放在域中,则将它们放在命令对象中。参见 this。您可以在任何时候通过 .properties 绑定机制将命令对象的值分配给域对象。例如,
yourDomainObject.properties = yourcommandObjectObject.properties
记住具有相同名称的属性将被绑定。
Do it in service: 你可以在服务方法中做你的计算,把那个服务注入你的控制器然后调用那个方法来执行计算,甚至也坚持到数据库。请记住,服务默认是事务性的。
希望对您有所帮助!