我正在尝试学习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的地方,我可以以某种方式添加一些计算,但我甚至不知道如何访问评级的值,我尝试的所有内容都会导致很多错误和必须一次又一次地重启应用程序。我尝试在控制器中添加计算,但我不知道如何将值输入数据库。那么我在哪里实际放置逻辑,以及如何访问这些值?
如果其他任何文件很重要,请告诉我。
希望得到一些关于如何开始这样做的提示,我并不认为这会很难。
答案 0 :(得分:1)
首先我建议开始阅读grails doc。后来你的问题不清楚你在问什么可能有几个地方或可能在域字段中设置值并将其持久保存到数据库。我告诉了我所知道的所有这些:
如果是需要应用于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
请记住,具有相同名称的属性将被绑定。
在服务中执行:您可以在服务方法中进行计算,将该服务注入您的控制器并调用该方法来执行计算,甚至也可以持久保存到db。记住服务默认是事务性的。
希望它有所帮助!