我在我的主应用程序的应用程序控制器中有一个before_filter挂钩,它执行以下操作:(它不只是在闪存中放置一个链接,有一条消息,但它与问题无关,它只是访问路径中的方法)
class ApplicationController < ActionController::Base
  before_filter :set_link
  def set_link
    flash[:notice] = items_path
  end
end
这适用于应用程序,但是当我进入控制器的引擎时,我得到了异常
No route matches {:controller=>"items", :action=>"index"}
据我所知,在引擎中,除非加上前缀,否则路径助手都是引擎 main_app
所以将应用程序控制器中的方法更改为
  def set_link
    flash[:notice] = main_app.items_path
  end
摆脱异常,但我真的不想这样做.是否有其他解决方案让引擎识别main_app路由?
编辑:
如果应用程序布局调用路径助手,也会发生这种情况.因此,如果引擎被设计为集成到main_app的布局中,那么这个问题也将在那里进行.
我正在寻找为已经构建的Rails 3应用程序设置一堆集成测试.该应用程序使用Rails 3和Ruby 1.9.2构建.我已经看到了对Capybara,Cucumber和RSpec 2的推荐,但我不确定每种产品的优点是什么.
我也注意到他们似乎紧密地联系在一起.我见过的帖子似乎总是谈到使用黄瓜的水豚,或者使用黄瓜的Rspec.
每个人的优点/缺点是什么?是否有一些最佳组合?
integration-testing cucumber capybara rspec2 ruby-on-rails-3
我遇到了一些看似不寻常的事情,我想知道是否有人可以解释原因.
1.8.7 :001 > some_str = "Hello World"
 => "Hello World" 
1.8.7 :002 > some_str.try(:match, /^(\w*)/)
 => #<MatchData "Hello" 1:"Hello"> 
1.8.7 :003 > $1
 => nil 
1.8.7 :004 > some_str.match(/^(\w*)/)
 => #<MatchData "Hello" 1:"Hello"> 
1.8.7 :005 > $1
 => "Hello" 
我不确定为什么全局变量$1没有第一次被设置,而是设置为第二次.任何见解?