我使用红宝石1.9.2和轨道3,我想我有一个适度简单的路由问题。轨道3路由问题(路由错误“没有路由匹配...”)
我有一个模型叫AdvancedQuery
。 其控制器为AdvancedQueriesController
。 几乎所有除了路由之外,一切都以标准导轨方式完成。我想更改网址的名称,我想更改其他一些内容(请参阅下文)。
这里是我的routes.rb文件
get "advanced_query" => "advanced_queries#new", as: :new_advanced_query
post "advanced_query(/:hash_value)(/:page)" => "advanced_queries#create", as: :create_advanced_query
get "advanced_query/:hash_value(/:page)" => "advanced_queries#search", as: :advanced_query_search
这里的相关部分与AdvancedQuery工作时,我期望行为:
- 用户进入http://localhost:3000/advanced_query(GET请求)并且浏览器调用
advanced_queries_controller
中的“新”方法。呈现new.html.haml
,其向用户显示填写的标准表格。 - 用户然后将数据输入到搜索表单中并按下“Submit”
- “Submit”调用“create”方法并在数据库中创建“AdvancedQuery”记录。 AdvancedQuery对象有一个32字符的散列关联它,1)标识查询和2)被用作结果URL的一部分(见步骤4)。
- 创建方法重定向到“搜索”方法,其中AdvancedQuery对象用于搜索第二个模型(称为BusinessModel)。然后,服务器呈现
search.html.haml
,然后显示AdvancedQuery的结果,并且在用户想要运行新搜索的情况下,它将原始表单重新呈现在与结果相同的页面上。这里生成的URL是:http://localhost:3000/advanced_query/blah(其中blah是与查询特定关联的32个字符的散列)。 - 现在用户使用步骤3中生成的网页中的表单输入一个新的搜索词。他按下“submit”并再次调用“create”方法(即我们重新执行步骤3 & 4) 。即创建一个新的AdvancedQuery。
这里是在现实中发生的事情:
步骤1 - 4正常工作。步骤5给了我一个路由错误"No route matches "/advanced_query"
无论是new.html.haml
和search.html.haml
文件呈现相同的部分(称为_form.html.haml
)。
所以,如果我看_form.html.haml
,我实在看不出什么错:
= form_for(@advanced_query, url: create_advanced_query_path) do |f|
.actions
# other generic form-related stuff
这里是我的控制器的相关部分
def new
@advanced_query = AdvancedQuery.new
end
def create
advanced_query = AdvancedQueryBuilder.build_advanced_query_from_post(request, params, current_user)
redirect_to(advanced_query_search_path(hash_value: advanced_query.hash_value))
end
def search
return render :bad_request unless request.get?
@advanced_query = AdvancedQuery.find_by_hash_value_and_user_id(params[:hash_value], current_user.id)
@results = BusinessModel.advanced_search(@advanced_query)
end
上是什么导致我的路由有什么想法错误?
谢谢!
你说的对不对,但即使我“修复”你指出的语法问题,我仍然会得到相同的路由错误。我在routes.rb文件中的新行是:post“advanced_query /(:hash_value(/:page))” – user141146 2011-01-27 04:46:06