我有一个客户模型,我希望他的控制器响应查找方法
我在routes.rb文件中添加了这个:
匹配"customers/find/:name"=>"mymodel#find"资源:customers
在我的控制器中,我有这样的东西:
def find
@customers = Customer.fin_all_by_name(params[:name])
end
在我看来,当我需要为该资源创建链接时,我使用的是:
= link_to 'Find By Name', :controller => "customers", :action => "find", :name => @customer.name
现在,我正在尝试使用cucumber进行集成测试,但我遇到了一个问题:我必须在customer_step.rb文件中为具有相同名称的客户创建一个步骤定义:
当/^与"(.*)"同名的客户/url_encode('/customs/find/'+$1)
现在这行不起作用了,它说未定义的方法"url_encode"我需要对这个字符串进行编码,因为如果名称包含空格,我会得到明显的错误。
我刚接触过红宝石和铁轨,我想我在这里错过了一些东西。
我是否遵循正确的模式来完成此搜索?我应该在控制器中定义一个助手方法来生成搜索URL吗?我在_step.rb文件中的那一行正确吗?
我不希望url是这样的:客户/查找?name=测试
但是:客户/查找/测试
我只是整理了一下,稍微修改了匹配表达式,并添加了:as参数这让我有可能调用find_path()helper方法
匹配"customers/find/:name"=>"customers#find",:as=>:find
这是正确的吗?
使用:as
确实应该为您创建一个路由助手。如果您想获得匹配路由的列表、它们路由到的控制器/操作以及路由助手的名称,请在控制台中使用rake routes
。