我正在使用 ruby 1.9.2 和 rails 3,我认为我在路由方面遇到了一个比较简单的问题。
我有一个模型叫AdvancedQuery
. 它的控制器是AdvancedQueriesController
。 除了布线之外,几乎所有事情都以标准的轨道方式完成。我想更改 URL 的名称,还想更改其他一些内容(见下文)。
这是我的 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(获取请求),浏览器调用
advanced_queries_controller
.new.html.haml
呈现给用户一个要填写的标准表格。 - 用户然后在搜索表单中输入数据并按“提交”
- “提交”调用“创建”方法并在数据库中创建“高级查询”记录。AdvancedQuery 对象有一个与之关联的 32 个字符的散列,它 1) 标识查询,2) 用作结果 URL 的一部分(参见步骤 4)。
- create 方法重定向到“search”方法,其中 AdvancedQuery 对象用于搜索第二个模型(称为 BusinessModel)。然后服务器呈现
search.html.haml
然后显示 AdvancedQuery 的结果,并在用户想要运行新搜索的情况下将原始表单重新呈现在与结果相同的页面上。此处生成的 URL 是:http://localhost:3000/advanced_query/blah(其中 blah 是与查询特别关联的 32 个字符的散列)。 - 现在,用户使用步骤 3 中生成的网页中的表单输入新的搜索词。他按下“提交”,应该再次调用“创建”方法(即我们重新执行步骤 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
关于导致我的路由错误的任何想法?
谢谢!