Причина, по которой ваши маршруты не работают, заключается в том, что они определены для каждого участника сообщений, поэтому /posts/1/posts/search
.Вы должны запустить rake routes
, чтобы проверить, куда идут ваши маршруты.
Чтобы решить вашу проблему, вы, вероятно, захотите исправить эти маршруты и убедиться, что вы определяете маршрут поиска для всей коллекции.Если это сбивает с толку, проверьте руководство .
resources :posts do
get :search, :on => :collection
end
Вам не нужны все остальные вещи, которые у вас были.Это создаст для вас все следующие маршруты:
search_posts GET /posts/search(.:format) {:action=>"search", :controller=>"posts"}
posts GET /posts(.:format) {:action=>"index", :controller=>"posts"}
POST /posts(.:format) {:action=>"create", :controller=>"posts"}
new_post GET /posts/new(.:format) {:action=>"new", :controller=>"posts"}
edit_post GET /posts/:id/edit(.:format) {:action=>"edit", :controller=>"posts"}
post GET /posts/:id(.:format) {:action=>"show", :controller=>"posts"}
PUT /posts/:id(.:format) {:action=>"update", :controller=>"posts"}
DELETE /posts/:id(.:format) {:action=>"destroy", :controller=>"posts"}
Rails определяет маршруты во всей коллекции до ресурсовых маршрутов по умолчанию (как вы можете видеть выше), чтобы ваши маршруты имели приоритет.
А что касается вашего PUT posts#search_result
метода, это действительно сбивает с толку - вы хотите обновить результат поиска вручную?
Согласно комментариям: Я быпорекомендуйте что-то вроде этого вместо отдельного действия для результатов поиска.Обычно страница поиска выглядит одинаково с результатами или без них, за исключением сообщения об ошибке, если вы выполняете поиск и ничего не появляется.Изящная обработка случая, когда страница поиска отображается без запроса, позволяет исключить избыточное действие.
def search
@query == params[:q] || ''
# search logic
flash[:error] = 'Nothing found message' if @results.empty? unless @query.blank?
end