小编Oli*_*ves的帖子

Application Controller中的引擎路由

我在我的主应用程序的应用程序控制器中有一个before_filter挂钩,它执行以下操作:(它不只是在闪存中放置一个链接,有一条消息,但它与问题无关,它只是访问路径中的方法)

class ApplicationController < ActionController::Base
  before_filter :set_link

  def set_link
    flash[:notice] = items_path
  end
end
Run Code Online (Sandbox Code Playgroud)

这适用于应用程序,但是当我进入控制器的引擎时,我得到了异常

No route matches {:controller=>"items", :action=>"index"}
Run Code Online (Sandbox Code Playgroud)

据我所知,在引擎中,除非加上前缀,否则路径助手都是引擎 main_app

所以将应用程序控制器中的方法更改为

  def set_link
    flash[:notice] = main_app.items_path
  end
Run Code Online (Sandbox Code Playgroud)

摆脱异常,但我真的不想这样做.是否有其他解决方案让引擎识别main_app路由?

编辑:

如果应用程序布局调用路径助手,也会发生这种情况.因此,如果引擎被设计为集成到main_app的布局中,那么这个问题也将在那里进行.

rails-routing rails-engines ruby-on-rails-3

12
推荐指数
1
解决办法
7807
查看次数

Rails集成测试

我正在寻找为已经构建的Rails 3应用程序设置一堆集成测试.该应用程序使用Rails 3和Ruby 1.9.2构建.我已经看到了对Capybara,Cucumber和RSpec 2的推荐,但我不确定每种产品的优点是什么.

我也注意到他们似乎紧密地联系在一起.我见过的帖子似乎总是谈到使用黄瓜的水豚,或者使用黄瓜的Rspec.

每个人的优点/缺点是什么?是否有一些最佳组合?

integration-testing cucumber capybara rspec2 ruby-on-rails-3

6
推荐指数
1
解决办法
1683
查看次数

正在设置正则表达式全局变量

我遇到了一些看似不寻常的事情,我想知道是否有人可以解释原因.

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" 
Run Code Online (Sandbox Code Playgroud)

我不确定为什么全局变量$1没有第一次被设置,而是设置为第二次.任何见解?

ruby regex ruby-on-rails activesupport

5
推荐指数
1
解决办法
562
查看次数