Ruby on rails 3 内存调用和数据库调用之间的区别

Ruby on rails 3 内存调用和数据库调用之间的区别,ruby-on-rails-3,performance,has-many-through,rails-console,Ruby On Rails 3,Performance,Has Many Through,Rails Console,好的,我第一个项目的主要问题是速度。在内存和数据库调用之间,我不知道哪个是哪个。我有两个问题: 如果数据库调用是这样调用的,我如何区分数据库调用和内存调用? 我遇到了一个指向的未定义方法错误 `r.status_messages.last.name` 所以我在rails控制台中测试了它,我有一种感觉 关于我的第一个问题。简而言之 r、 status_messages.last.name不起作用读取为2个命令,r.status_messages.last和.name 但是,h=r.status\

好的,我第一个项目的主要问题是速度。在内存和数据库调用之间,我不知道哪个是哪个。我有两个问题:

如果数据库调用是这样调用的,我如何区分数据库调用和内存调用? 我遇到了一个指向的未定义方法错误

`r.status_messages.last.name`
所以我在rails控制台中测试了它,我有一种感觉 关于我的第一个问题。

简而言之

r、 status_messages.last.name不起作用读取为2个命令,r.status_messages.last和.name 但是,h=r.status\u messages.last然后h.name可以工作 但是,当我这样做时,r.status\u messages.last.name,它现在可以工作了。这里发生了什么? 细节 请求表单有很多状态消息:通过请求状态Rails 3.2.3、Ruby193、Windows 7 Prof、NetBeans IDE 6.9.1 轨道控制台

r = RequestForm.find(25) 
r = RequestForm.find(25)
  [1m[35mRequestForm Load (1.0ms)[0m  SELECT `request_forms`.* FROM `request_forms` WHERE `request_forms`.`id` = ? LIMIT 1  [["id", 25]]
#<RequestForm id: 25, control_no: 1, requested: true, cds_requested: nil, cds_returned: nil, approval: false, cds_released: nil, cds_recycled: nil, defective_cds: 0, request_date: "2012-05-30", released_date: nil, user_id: 3, admin_id: nil, remarks: nil, created_at: "2012-05-30 07:13:50", updated_at: "2012-05-30 07:13:50">
r.status_messages
r.status_messages
[#<StatusMessage id: 1, description: "can be edited until sent", user_id: nil, created_at: "2012-05-30 07:31:02", updated_at: "2012-05-30 07:31:02", name: "Created">, #<StatusMessage id: 2, description: "visible to admin", user_id: nil, created_at: "2012-05-30 07:32:51", updated_at: "2012-05-30 07:32:51", name: "Sent">]
  [1m[36mStatusMessage Load (1.0ms)[0m  [1mSELECT `status_messages`.* FROM `status_messages` INNER JOIN `request_statuses` ON `status_messages`.`id` = `request_statuses`.`status_message_id` WHERE `request_statuses`.`request_form_id` = 25[0m
r.status_messages.last
r.status_messages.last
#<StatusMessage id: 2, description: "visible to admin", user_id: nil, created_at: "2012-05-30 07:32:51", updated_at: "2012-05-30 07:32:51", name: "Sent">
r.status_messages.last
.name
r.status_messages.last
#<StatusMessage id: 2, description: "visible to admin", user_id: nil, created_at: "2012-05-30 07:32:51", updated_at: "2012-05-30 07:32:51", name: "Sent">
.name
SyntaxError: (irb):6: syntax error, unexpected '.'
.name
 ^
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'
r.status_messages.last
.description
r.status_messages.last
#<StatusMessage id: 2, description: "visible to admin", user_id: nil, created_at: "2012-05-30 07:32:51", updated_at: "2012-05-30 07:32:51", name: "Sent">
.description
SyntaxError: (irb):10: syntax error, unexpected '.'
.description
 ^
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'
h = r.status_messages.last

h = r.status_messages.last
#<StatusMessage id: 2, description: "visible to admin", user_id: nil, created_at: "2012-05-30 07:32:51", updated_at: "2012-05-30 07:32:51", name: "Sent">

h.name
h.name
"Sent"
r.status_messages.last.name
r.status_messages.last.name
"Sent"
r.status_messages.last.description
r.status_messages.last.description
"visible to admin"
编辑:我已经说明了这个问题,关于两个查询的划分。抱歉说不清楚

我键入r.status\u messages.last.name,然后按enter键

但rails控制台将其剪切为r.status\u messages.last和.name。这导致了语法错误

名称和描述是状态消息的属性

但是,当我将r.status\u messages.last保存到变量h时

h、 姓名和h.描述有效

令人惊讶的是:r.status\u messages.last.name在事后也表现得很好

如果数据库调用是这样调用的,我如何区分数据库调用和内存调用? 我想要一个好的参考,那里有一个表或比较列表,比如.size到.length。 是什么导致了这种分裂? 那个时候,懒散的加载让我感到困惑。这就是我的应用程序出现意外数据库调用的原因。不小心调用:count将使用sql计数查询数据库。您可能需要使用一个尺寸。 这是一个类的例外。r.status\u messages.last.name中没有最后一条状态消息。因此,nil对象的:name抛出了一个未定义的方法错误。 正如@DaveNewton所评论的,Netbeans终端似乎是这里的问题。
请自己仔细看看你的代码。我打赌您也会看到语法错误消息。我不清楚控制台输出是什么,但在错误情况下,例如.description,它似乎是.description在它自己的行上,这确实是一个语法错误,如图所示。感谢@rubish,在rails控制台将其一分为二之后,语法当然是错误的。知道这是什么原因吗?@DaveNewton谢谢你的回复,请参阅编辑。@RafaelPerea不知道;我从未使用过任何rails控制台随机截断用户输入,如果这是一个NetBeans控制台窗口,您的答案可能就在那里。