【问题标题】:Grails connect database fieldsGrails 连接数据库字段
【发布时间】:2016-01-12 12:29:35
【问题描述】:

我正在尝试学习 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 grails-domain-class grails-controller


    【解决方案1】:

    首先,我建议您开始阅读 grails 文档。稍后从您的问题来看,您要问什么并不太清楚,可能有几个地方或可能性可以在域字段中设置值并将其保存到数据库中。我正在告诉所有这些我知道的:

    1. 如果需要将通用计算应用于您的 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
       }
      }
      
    2. 在 commandObject 中执行:如果您不想将某些计算和验证放在域中,请将它们放在命令对象中。见this。您可以随时通过 .properties 绑定机制将值从命令对象分配给域对象。例如,

          yourDomainObject.properties = yourcommandObjectObject.properties
      

      记住具有相同名称的属性将被绑定。

    3. 在服务中执行:您可以在服务方法中进行计算,将该服务注入您的控制器并调用该方法来执行计算,甚至还可以保存到数据库。请记住,服务默认是事务性的。

    希望对你有帮助!

    【讨论】:

    • 谢谢!我喜欢第一个选项,但我需要访问与事件相关的评级值。或者我会从其他地方调用该函数,例如在创建新评级时?
    • 你可以在那里进行任何级别的操作。例如,您可以在 setter 中使用 Event.findAll() 。我建议您尝试并尝试并通过 grails 文档快速学习它。
    • 在域中放置一些逻辑时应该非常小心,因为您最终可能会得到一个沉重的域,因此我建议您使用服务。但是对于与域高度耦合的场景,请使用域进行此类操作
    • Adesh Kumar:感谢您的提示。这只是一个测试的东西,我希望它可以轻松地做一些事情。我以后可能会学习如何使用服务,但现在这对我来说听起来太复杂了。 @Vinay Prajapati:findAll 是一个很好的提示。但是我的函数“setDRating”似乎没有执行。当我离开我拥有的 iniatilizing = 2 时,它给出了一个错误(消息:错误映射到视图 [/index]:错误应用布局:main)我必须在某处编写方法调用吗?
    猜你喜欢
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 2012-07-31
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多