Я использую ruby 1.9.2 и rails 3 и думаю, что у меня довольно простая проблема с маршрутизацией.
У меня есть модель с именем AdvancedQuery
.Его контроллер AdvancedQueriesController
. Почти все сделано стандартным способом рельсов, кроме маршрутизации.Я хотел изменить имена URL-адресов, и я хотел изменить несколько других вещей (см. Ниже).
Вот соответствующая часть моего файла rout.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
отображается, который показывает пользователю стандартную форму для заполнения. - Затем пользователь вводит данные в форму поиска и нажимает «Submit»
- «Submit» вызывает метод «create»и создает запись «AdvancedQuery» в базе данных.С объектом AdvancedQuery связан 32-символьный хеш, который 1) идентифицирует запрос и 2) используется как часть полученного URL (см. Шаг 4).
- Метод create перенаправляет на «поиск»метод, в котором объект 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
Любые мысли о том, что вызываетмоя ошибка маршрутизации?
Спасибо!