RSpec期望改变: it "should increment the count" do expect{Foo.bar}.to change{Counter.count}.by 1 end 有两种方法可以期待两个表格的变化吗? expect{Foo.bar}.to change{Counter.count}.by 1 and change{AnotherCounter.count}.by 1
我有一个图像,其中包含carrierwave上传: Image.find(:first).image.url #=> "/uploads/image/4d90/display_foo.jpg" 在我看来,我想find这个绝对的url。 追加root_url结果为double / 。 root_url + image.url #=> http://localhost:3000//uploads/image/4d90/display_foo.jpg 我不能使用url_for (我知道),因为它可以允许传递path或选项列表来标识资源和:only_path选项。 由于我没有可以通过“controller”+“action”识别的资源,所以我不能使用:only_path选项。 url_for(image.url, :only_path => true) #=> wrong amount of parameters, 2 for 1 在Rails3中创build完整path的path最干净和最好的方法是什么?
我一直有一个问题,包括鞋在Windows鞋应用程序。 包装工具完美地工作,当我不要求在应用程序中包括鞋:我得到一个.exe ,如果在无鞋电脑上启动,下载鞋,然后按预期运行。 然而,当我要求它包括鞋子时,包装者似乎从一开始就陷入了一些东西。 至less,在其他一些情况下 ,即使不包含鞋子,包装人员也可以制作可执行文件。 在这里,它只是冻结。 我甚至尝试过这里提出的解决scheme,但是我无法pipe理鞋子。 在克隆rubyinstaller存储库并下载必要的元素之后, rake命令会过早地中止。
可能重复: 在Ruby中什么意思? 我正在从Ruby的Poignant指南中学习Ruby,在一些代码示例中,我遇到了用于相同目的的双冒号和圆点的使用: File::open( 'idea-' + idea_name + '.txt', 'w' ) do |f| f << idea end 在上面的代码中,正在使用双冒号访问File类的open方法。 不过,后来我发现代码中使用了一个点来达到同样的目的: require 'wordlist' # Print each idea out with the words fixed Dir['idea-*.txt'].each do |file_name| idea = File.read( file_name ) code_words.each do |real, code| idea.gsub!( code, real ) end puts idea end 这一次,正在使用一个点来访问File类的read方法。 有什么区别: File.read() 和 File::open()
我试图完全理解Rack中并发请求处理的选项。 我已经使用async_sinatra构build了一个长轮询应用程序,现在正在使用throw :async和/或Thin's -threaded标志尝试裸机。 我对这个主题感到满意,但有些东西我无法理解。 (不,我没有错在并行性的并行性,是的,我明白GIL的限制)。 Q1。 我的testing表明, thin –threaded (即rack.multithread=true )在单独的线程(我假设使用EM)同时运行请求,这意味着长时间运行的请求A不会阻止请求B(IO旁)。 这意味着我的应用程序不需要任何特殊的编码(例如callback)来实现并发(同样,忽略阻塞DB调用,IO等)。 这是我相信我所观察到的 – 这是正确的吗? Q2。 还有另外一个讨论实现并发的方法,涉及到EventMachine.defer和throw :async 。 严格来说,请求不是使用线程处理的。 他们被串行处理,但是将他们的繁重工作和callback传递给EventMachine,后者使用async.callback在以后发送响应。 在请求A已经将其工作卸载到EM.defer之后,请求B开始。 它是否正确? Q3。 假设上面的或多或less是正确的, 那么一种方法比另一种更有优势吗? 显然 – –threaded看起来像一个神奇的子弹。 有什么缺点吗? 如果没有,为什么每个人都在谈论async_sinatra / throw :async / async.callback ? 也许前者是“我想让我的Rails应用程序在重负载下稍微快一点”,而后者更适合具有许多长时间运行请求的应用程序? 或者也许规模是一个因素? 只是在这里猜测。 我在MRI Ruby 1.9.2上运行Thin 1.2.11。 (仅供参考,我必须使用–no-epoll标志,因为在EventMachine中使用epoll和Ruby 1.9.2有一个长久的,被认为已经解决但并非真正的问题 。洞察力是受欢迎的。)
我在Ubuntu Linux Box上安装rails(v3),安装失败,抱怨缺lessjavascript运行时。 我做了一些查找,事实certificate,轨道需要一个JavaScript运行时安装在其运行的平台上。 而Windows默认捆绑了jscript。 我的Ubuntu的盒子没有一个JS运行时,我通过安装node.js(V8)解决了这个问题。 AFAIK,需要一个js运行时才能执行JavaScript代码和轨道只是一个embeddedJavaScript的Web框架。 JavaScript文件只能在客户机上运行。 那么, 为什么rails需要JavaScript运行时?
我对Ruby比较陌生,并且一直关注着“Ruby On Rails 3教程 – 通过示例学习Ruby – Michael Hartl”一书。 我目前正在讨论静态页面的第3章。 在本章中,我将下面的命令input到提示符中: rails generate controller Pages home contact和一切工作正常。 然后这本书指引我到http://localhost:3000/pages/home 。 当我指向我的浏览器时,我收到以下错误。 的ActiveRecord :: ConnectionNotEstablished 的ActiveRecord :: ConnectionNotEstablished Rails.root:/ home / ralph / railsprojects / sample_app 应用程序跟踪| 框架跟踪| 完整跟踪 路由和控制器erb似乎没有任何错误。 这是一个数据库相关的错误? 有任何想法吗? 谢谢,DMAT 更新: 这是我的database.yml文件中的代码。 # SQLite version 3.x # gem install sqlite3 # # Ensure the […]
在rspec doc中说,我应该使用double方法来创buildtestingdouble。 但是我可以看到,即使我不使用double ,它也能正常工作。 不使用double有什么问题吗? 另外,如果我不使用双如何MyClass获取stub和其他rspec方法? 它们在rspec中运行时是否可用于所有对象? require 'spec_helper' class MyClass def self.run new.execute end def execute 'foo' end end describe MyClass do it 'should stub instance method' do obj = MyClass.new obj.stub(:execute).and_return('bar') obj.execute.should == 'bar' end it 'should stub class method' do MyClass.stub(:run).and_return('baz') MyClass.run.should == 'baz' end end
我试图让Matz和Flanagan的“Ruby编程语言”元编程章节进入我的脑海,但是我无法理解我梦寐以求的代码片段的输出: p Module.constants.length # => 88 $snapshot1 = Module.constants class A NAME=:abc $snapshot2 = Module.constants p $snapshot2.length # => 90 p $snapshot2 – $snapshot1 # => ["A", "NAME"] end p Module.constants.length # => 89 p Module.constants – $snapshot1 # => ["A"] p A.constants # => ["NAME"] 本书指出类方法constants返回类的constants列表(正如你可以在A.constants的输出中看到的A.constants )。 当我遇到上述奇怪的行为时,我试图获取为Module类定义的常量列表。 A的常量显示在Module.constants中。 如何获得Module类定义的常量列表? 文档状态 Module.constants返回系统中定义的所有常量。 包括所有类和方法的名称 由于A从Module.constantsinheritance它的实现,它在基类和派生types中的行为有什么不同? […]
在ruby中,我明白模块的function可以通过使用module_function在模块中混合使用,如下所示。 我可以看到这是如何有用,所以你可以使用该function,而不需要在模块中混合。 module MyModule def do_something puts "hello world" end module_function :do_something end 我的问题是,为什么你可能想要定义这两种方式的function。 为什么不只是有 def MyModule.do_something 要么 def do_something 在什么样的情况下将这个function混合在一起,或者作为一个静态的方法来使用呢?