小编Mik*_*uto的帖子

Grails中object.get()vs object.read()的好处

我撇了一些Grails文档,发现一点关于read()Grails的方法.如果我正确理解了这一点,您可以从数据库中提取一个只读对象的"只读"版本,该版本只会在显式save()调用中保存.在我看来,read()只要你有一个你不希望被改变的对象,就应该使用一个调用.

但为什么你不会总是使用read()电话?因为save()无论如何,对象将被更改为读/写权限,仅仅读取对象而不是获取它是不是更安全?

grails read-write grails-orm

25
推荐指数
1
解决办法
6536
查看次数

在单元测试中比较对象的正确方法

我正在为我的grails应用程序编写单元测试,并且我意识到我并不知道确定对象是否是正确对象的正确方法.

例如,鉴于此测试:

void testExampleTest() {
    mockSession.person = new Person(firstName:'John', lastName:'Doe', middleInitial:'E')
    def model = controller.testMethod()
    ...assertions...
}
Run Code Online (Sandbox Code Playgroud)

def testMethod = {
    Person currPerson = session.getAttribute("person")
    render(view:'view',model:[person:currPerson]
}
Run Code Online (Sandbox Code Playgroud)

我应该如何确保我添加到会话中的人物对象在模型中正确传递?是否足够使用

assertEquals( person,model['person'] )
Run Code Online (Sandbox Code Playgroud)

或者因为我自己将对象注入会话中使用它更有意义

assertEquals( person.firstName, model['person'].firstName )
assertEquals( person.lastName, model['person'].lastName )
assertequals( person.middleName, model['person'].middleName )
Run Code Online (Sandbox Code Playgroud)

在我看来,只要对象具有正确定义的equals方法,第一种方法就足够了,但我只是想看看传统的方法是什么.

谢谢

java grails junit unit-testing

5
推荐指数
1
解决办法
6161
查看次数

GMT中的Java时间

我有一个Grails应用程序,代码如下:

Date now = Calendar.getInstance().getTime() //Also tried new Date()
println "now: " + now
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我明白了now: Thu Aug 18 12:47:09 CDT 2011.我需要将日期设置为GMT,而不是当地时间,因为我需要将GMT时间存储在数据库中.我可以使用simpleDateFormat对象在GMT中打印出时间,但我需要将其实际存储为GMT.

问题:如何使用GMT将Date对象转换为Date对象?

java grails date gmt

5
推荐指数
1
解决办法
4082
查看次数

Grails的Quartz作业只会触发一次

我正在尝试使用Quartz插件在我的Grails Web应用程序中设置一个cron作业.我目前只是尝试使用以下代码每秒执行一次测试作业:

class TestJob {
    private int counter = 0
    static triggers = {
        simple repeatInterval: 1000
    }

    def execute() {
        // execute job
        counter += 1
        System.out.println("Testing the cron " + counter)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行应用程序时,我只看到第一次execute()调用的初始输出两次:一次是在我收到服务器正在运行的警报之前,一次是在紧接着之后.

| Loading Grails 2.1.0
| Configuring classpath.
| Environment set to development.....
| Packaging Grails application.....
| Compiling 1 source files.....
| Running Grails application
Testing the cron 1
| Server running. Browse to http://localhost:8080/QuartzTest
Testing the cron 1
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么我的Quartz作业可能无法正确触发?我尝试过使用cron而不是简单,以及使用不同的参数,时间间隔等.没有什么有所作为. …

grails quartz-scheduler

5
推荐指数
1
解决办法
2982
查看次数

使用 Pyglet 加载图像

我在玩 pyglet 1.2alpha-1 和 Python 3.3。我有以下(非常简单的)应用程序,但无法弄清楚我的问题是什么:

import pyglet

window = pyglet.window.Window()
#image = pyglet.resource.image('img1.jpg')
image = pyglet.image.load('img1.jpg')
label = pyglet.text.Label('Hello, World!!',
                      font_name='Times New Roman',
                      font_size=36,
                      x=window.width//2, y=window.height//2,
                      anchor_x='center', anchor_y='center')

@window.event
def on_draw():
    window.clear()
    label.draw()
    #    image.blit(0,0)

pyglet.app.run()
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,只要将 image.blit(0, 0) 注释掉,我的文本标签就会出现。但是,如果我尝试显示图像,程序会因以下错误而崩溃:

  File "C:\Python33\lib\site-packages\pyglet\gl\lib.py", line 105, in errcheck
raise GLException(msg)
pyglet.gl.lib.GLException: b'invalid value'
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用 pyglet.resource.image 而不是 pyglet.image.load (图像和 py 文件在同一目录中),我也会收到上述错误。

有谁知道我该如何解决这个问题?

我使用的是 Python 3.3、pyglet 1.2alpha-1 和 Windows 8。

opengl pyglet image-loading python-3.x

5
推荐指数
1
解决办法
2800
查看次数

如何从View中调用Rails控制器中的自定义方法

我已经设置了一个正确使用基本CRUD功能的站点.但是,当我尝试向我的控制器添加自定义方法时,我似乎无法将其连接到link_to呼叫.我一直收到method not found错误.

Controller方法如下所示:

def complete
    return render :text => "Complete"
end
Run Code Online (Sandbox Code Playgroud)

我在视图中的调用如下所示:

<%= link_to 'Complete', complete_list_task_path(@list,@task) %>
Run Code Online (Sandbox Code Playgroud)

同样的调用适用于我的Edit方法,所以我不确定我做错了什么.当方法不是基本的CRUD调用时,是否需要执行任何特殊操作?

我的路由文件的唯一相关部分看起来像这样(列表和任务是嵌套资源.列表有很多任务,任务属于列表):

resources :lists do
    resources :tasks
end
Run Code Online (Sandbox Code Playgroud)

我也尝试添加post "complete" => "lists/:id/tasks/:id#complete", :as => "complete"到我的路线,看看是否有助于隐式尝试调用它,但我仍然有一个"找不到方法错误".

任何帮助,以确定如何打电话将不胜感激.谢谢!

ruby controller ruby-on-rails view

3
推荐指数
1
解决办法
3471
查看次数

Ruby on Rails form_for导致路径错误

在我的Ruby on Rails代码中,我有以下edit.html.erb文件用于任务:

<%= render 'form' %>
Run Code Online (Sandbox Code Playgroud)

然后我在同一目录中有一个_form模板,代码如下:

<%= form_for @task do |f| %>
    <%= fl.label :title %><br />
<% end %>
Run Code Online (Sandbox Code Playgroud)

问题是我在尝试导航到编辑页面时遇到错误.错误显示"未定义的task_path",所以我可以告诉Rails没有正确识别我的任务的路径.

程序结构的方式是我有一个包含许多任务的List,每个任务都有一个列表.routes文件以这种方式声明结构:

resources :lists do
    resources :tasks
end
Run Code Online (Sandbox Code Playgroud)

如何让form_for识别我正在尝试编辑/ lists /:list_id/tasks /:task_id/edit中的任务?

谢谢您的帮助!

ruby ruby-on-rails form-for nested-resources

2
推荐指数
1
解决办法
1491
查看次数

在嵌套资源上不正确地路由Rails Destroy方法

我有一个List对象,具有嵌套的任务.我创建了一个显示单个任务的页面,还有一个允许用户编辑单个任务的页面.我现在想要添加从任务编辑页面上的列表中删除任务的功能.使用以下代码

<%= link_to 'Delete this task',@task, confirm: 'Are you sure?', method: :delete %>
Run Code Online (Sandbox Code Playgroud)

产量

undefined task_path method
Run Code Online (Sandbox Code Playgroud)

这段代码在show.html.erb页面上,我在那里调用@task来显示任务中存储的所有数据,所以我相信这个问题可能是某种路由错误,但我似乎无法想象它出.

相关的控制器方法是

def destroy
    @task = Task.find(params[:id])
    @task.destroy

    respond_to do |format|
        format.html { redirect_to list_tasks_path(@task) }
        format.json { head :ok }
    end
end
Run Code Online (Sandbox Code Playgroud)

我认为使用delete方法我提供的@task只会通过params发送到destroy方法,但是这个错误似乎表明这并不是它的工作原理.那么如何在Rails中正确销毁嵌套资源呢?

编辑: 这是具有嵌套资源的路径文件:

MyApp::Application.routes.draw do
    resources :lists do
        resources :tasks
    end
    get "home/index"

    root :to => 'home#index'
end
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

ruby ruby-on-rails nested-resources destroy

2
推荐指数
1
解决办法
2143
查看次数

Grails从View调用Controller方法

我有一个关于grails的快速问题.我有一个视图页面迭代一个对象数组来显示它们.HTML/Grails标记代码如下所示:

<g:each in="${ICFList}" status="i" var="icf">
<tr>
    <td>${icf.printName?.encodeAsHTML()}</td>
    <td>${icf.activeNote?.encodeAsHTML()}</td>
</tr>
</g:each>
Run Code Online (Sandbox Code Playgroud)

此代码可以工作并显示我需要的内容.但是,我不想再在我的icf对象中存储printName变量.该对象还包含一个用于标识它的字符代码,我有一个方法可以根据代码查找printName值.基本上,我的问题是:

有没有办法做这样的事情

<td>${icf.getNameFromCode(${icf.code})}</td>
Run Code Online (Sandbox Code Playgroud)

无需将名称存储在任何地方?getNameFromCode方法在此特定视图的控制器对象中定义,但我无法弄清楚如何从gsp访问它.任何帮助是极大的赞赏.

methods grails loops controller view

1
推荐指数
1
解决办法
6516
查看次数

Grails MissingPropertyException

我一直遇到一个奇怪的错误,让我整个上午都挂了电话.我有一个Grails应用程序,其Person类看起来像这样:

class Person {
        String id
    Date   lastUpdated
    String note
    String lastName
    String firstName
    String middleName
    String facility
    ...
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有一个闭包来获取模型:

def personDetail = {
    Person person = new Person()
    ...
    List<Person> personSearchList = session.getAttribute("searchResults")
    Person selectedSearchPerson = selectedSearchPersonList.find { it.id == selectedID }
    person.firstName = selectedSearchPerson.firstName
    person.lastName = selectedSearchPerson.lastName
    person.middleName = selectedSearchPerson.middleName
    person.facility = selectedSearchPerson.facility
    ...
    return [person:person]
}
Run Code Online (Sandbox Code Playgroud)

现在,这段代码昨天工作正常.然而今天早上,没有做任何修改(我甚至尝试恢复到较旧的svn提交)当我单击g:链接以显示detailController gsp时,我收到以下错误:

groovy.lang.MissingPropertyException: No such property: facility for class: org.icf.Person
at org.bjc.icf.DetailController$_closure3.doCall(DetailController.groovy:33)
at org.bjc.icf.DetailController$_closure3.doCall(DetailController.groovy)
at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud)

我已经尝试在线查找可能导致此错误的解决方案,但我似乎找不到任何东西.有没有人知道为什么我可能突然在以前工作的代码上得到MissingPropertyExceptions(是的,我已经检查以确保该属性仍然在类中).

grails groovy runtime-error properties

1
推荐指数
1
解决办法
2705
查看次数