小编her*_*hey的帖子

在Ruby on Rails中,如何在会话之间将对象保留在内存中

我正在尝试构建一些东西(最终是一个宝石,但现在是一个应用程序),其工作方式如下.

例如,假设DB记录是狗的品种.每个品种都有一个Dog父类和一个子类.直到运行时才知道实际品种.

当服务器开始时,它将从DB加载记录并根据记录实例化类的实例,例如我可能有两个小猎犬和贵宾犬.当有人来到服务器时,他们可能想要访问其中一个狗实例.

为什么不动态创建实例?在我的例子中,"狗"基本上是包含算法和数据的类.算法不会改变,数据变化很少(按天数排序),但算法本身的执行(使用数据和传递的一些动态数据,如时间戳)将每秒多次访问.

如果必须重新创建对象的实例并且每次只是为了在下一个请求时再次执行请求而加载数据(请求不会更改对象的状态),那将是愚蠢的.当我可以重复使用同一个对象时,我将创建并销毁多个对象.

将它保留在会话中是没有意义的,因为想要一只贵宾犬的人不需要在她的会话对象中有beagles信息; 这是无关紧要的(并且没有扩展).

如何将这些对象保留在内存中?我基本上想要一个查找表来保存实例.在Java中,我将创建一个包含某种类型的hashmap或数组的单例,它们位于内存中.在rails中我通过在lib文件夹中创建一个单例类来尝试这个.我认为 - 我可能不理解这一点 - 当会话消失时,实例(事实上它是单身人士没有实际意义)正在丢失.

我找到的最接近的答案是http://www.ruby-forum.com/topic/129372,它基本上将所有内容放在课程领域和方法中.不知怎的,似乎不对.

TIA!

另外:我来自Java.在Java中,我只是创建一个位于堆上或可能位于JNDI树中的对象,当HTTP请求进入时,它们将由一个servlet或EJB或一些每个请求项处理,然后可以访问持久对象.我似乎无法在rails中找到相应的东西.

memory persistence ruby-on-rails object

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

如何在Rails 3下的rspec测试中访问控制器常量

使用Rails 3.2我在子目录中有一个控制器(例如/controllers/data_feeds/acme_feed_controller.rb)

该控制器有一些常数如下

class DataFeeds::AcmeFeedController < ApplicationController

  MY_CONSTANT = "hi

  def do_something do
    ...
  end

end
Run Code Online (Sandbox Code Playgroud)

在我的rspec控制器规范(在/spec/controllers/data_feeds/acme_feed_controller_spec.rb中)我想访问该常量,以下是我尝试过的两种方法(两种方式都在下面的代码中注释掉)

describe AcmeFeedController do
  if "tests something" do
    #c = AcmeFeedController.MY_CONSTANT
    #c = DataFeeds::AcmeFeedController.MY_CONSTANT
  end
end
Run Code Online (Sandbox Code Playgroud)

我显然不了解规范测试的运行范围.我需要做什么,同样重要的原因(即范围内发生了什么).

谢谢你的帮助.

ruby testing rspec ruby-on-rails constants

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

Capybara在页面上找不到链接

我正试图让我的第一次水豚测试继续进行.我遵循Ryan Bate的理念并将一些功能测试放入我的控制器规范文件中.

describe UsersController do
  render_views

  it "can get the home page" do
    get 'home'
    response.body.should include("Login")
  end

  it "should log in" do
    get 'home'
    puts response.body
    click_link('Login')
    response.body.should include("Email")
    response.body.should include("Password")
  end

end
Run Code Online (Sandbox Code Playgroud)

在它应该登录我遇到问题所以开始只是试图确保我可以找到并单击链接.没运气.在上面的测试中,我只是想确保链接存在

puts response.body产生以下输出

...
  <div id="user_nav">
      <a href="/users/sign_up">Register</a> or <a href="/users/sign_in" id="Login">Login</a>
  </div>
...
Run Code Online (Sandbox Code Playgroud)

我也看到了实际页面上的元素.似乎只有我的测试找不到它.第一次测试确实通过了.

 1) UsersController should log in
     Failure/Error: click_link('Login')
     Capybara::ElementNotFound:
       no link with title, id or text 'Login' found
     # (eval):2:in `click_link'
     # ./spec/controllers/users_controller_spec.rb:14:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

我正在使用Rails …

capybara rspec2 ruby-on-rails-3

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