您是否必须定义控制器帮助程序以获取rails中新路由的路径?

时间:2012-03-24 10:02:40

标签: ruby-on-rails ruby routes

我有一个Customer模型,我希望他的控制器能够响应一个find方法

我在routes.rb文件中添加了这个:

  

匹配' customers / find /:name' => '为MyModel#查找'资源:客户

在我的控制器中,我有类似的东西:

def find
  @customers = Customer.fin_all_by_name(params[:name])
end

在我的观看中,当我需要为该资源创建一个链接时,我使用它:

= link_to 'Find By Name', :controller => "customers", :action => "find", :name => @customer.name

现在,我正在尝试使用黄瓜进行集成测试,我遇到了一个问题:我必须在customer_step.rb文件中为同名客户创建一个步骤定义:

  

当/ ^客户的名称与"(。*)" /同名时         url_encode(' / customers / find /' + $ 1)

现在该行不起作用,它表示未定义的方法`url_encode' 我需要对该字符串进行编码,因为如果名称包含空格,我会遇到明显的错误。

我是ruby和rails的新手,我想我在这里遗漏了一些东西。

我是否按照正确的模式完成此搜索? 我应该在控制器中定义一个帮助方法来生成搜索网址吗? 我的_step.rb文件中的行是否正确?

我不想让网址像这样:客户/发现?姓名=测试
但是:客户/发现/测试

我刚刚整理出来,我稍微修改了我的匹配表达式并添加了:as参数 这让我有可能调用find_path()辅助方法

  

匹配' customers / find /:name' => '客户#find',:as => :查找

这是对的吗?

1 个答案:

答案 0 :(得分:1)

使用:as确实应该为您创建一个路由助手。如果要获取匹配路由的列表,路由到哪个控制器/操作以及路由助手的名称,请在控制台中使用rake routes