我撇了一些Grails文档,发现这一点关于read()Grails的方法.如果我正确理解了这一点,您可以从数据库中提取一个只读对象的"只读"版本,该版本只会在显式save()调用中保存.在我看来,read()只要你有一个你不希望被改变的对象,就应该使用一个调用.
但为什么你不会总是使用read()电话?因为save()无论如何,对象将被更改为读/写权限,仅仅读取对象而不是获取它是不是更安全?
我正在为我的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方法,第一种方法就足够了,但我只是想看看传统的方法是什么.
谢谢
我有一个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对象?
我正在尝试使用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而不是简单,以及使用不同的参数,时间间隔等.没有什么有所作为. …
我在玩 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。
我已经设置了一个正确使用基本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 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中的任务?
谢谢您的帮助!
我有一个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)
谢谢您的帮助!
我有一个关于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访问它.任何帮助是极大的赞赏.
我一直遇到一个奇怪的错误,让我整个上午都挂了电话.我有一个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 ×6
ruby ×3
controller ×2
java ×2
view ×2
date ×1
destroy ×1
form-for ×1
gmt ×1
grails-orm ×1
groovy ×1
junit ×1
loops ×1
methods ×1
opengl ×1
properties ×1
pyglet ×1
python-3.x ×1
read-write ×1
unit-testing ×1