2015-10-23 6 views
0

Я пытаюсь настроить форму на моей индексной странице, которая будет передавать параметр myform на ту же страницу индекса с помощью запроса GET. Я думал, что это будет относительно просто. но я получаю сообщение об ошибке.Нет ссылок на маршрут [POST] "/" при отправке формы

Я создал контроллер, RecipesController с методом называется index:

class RecipesController < ApplicationController 
    def index 
    @search = params[:myform] 
    return @search 
    end 
end 

В этом методе я пытаюсь получить обратно то, что пользователь вводит в текстовое поле при нажатии кнопки и запрос GET увольняется.

Вот мое мнение:

<h1>Recipe Finder</h1> 

<%= form_tag(controller:"recipes",method:"get") do %> 
<%= label_tag(:myform, "Search") %> 
<%= text_field_tag(:myform) %> 
<%= submit_tag("search") %> 
<% end %> 

Вот мои маршруты:

Rails.application.routes.draw do 
    root 'recipes#index' 

Это проявляется в порядке, когда я посещаю localhost:3000, но когда я нажимаю на кнопку Я ожидаю, что контроллер index чтобы просто вернуть текст, который я ввел в текстовое поле. К сожалению, я только получаю:

No route matches [POST] "/" 

Я знаю, установку корня recipes#index вызывает сбой в моих @search переменных не установлен, когда страница открыта первоначально.

Мне интересно, должен ли я иметь отдельный маршрут и метод для запроса GET, и должен ли я просто открыть главную страницу с вызовом localhost:3000 без запуска какого-либо кода в контроллере? Это возможно?

+0

Попробуйте добавить 'ресурсы: recipes' для' маршрутов. rb' – Pavan

ответ

0

Проблема в том, что form_tag принимает Hash как свой первый, так и второй аргумент. Если вы не используете скобки, он будет интерпретировать все это как часть первого аргумента, а ваш не применяется должным образом.

Из-за этого он по умолчанию выполняет запрос POST, для которого нет маршрута.

Попробуйте это. Поскольку первый аргумент больше в Hash нет, он должен работать правильно:

<%= form_tag("/", method: "get") do %> 

Кроме того, с помощью кода, вы можете попробовать это:

<%= form_tag({ controller: "recipes" }, { method: "get" }) do %> 
Смежные вопросы