Простая Rails форма справки по использованию - PullRequest
0 голосов
/ 25 апреля 2011

Я пытаюсь создать форму на главной странице моего веб-приложения.Прямо сейчас у меня есть контроллер с именем home_controller.rb и представление с именем index.html.erb.Эти двое прямо сейчас обрабатывают «индекс» моего сайта.Я также пытаюсь добавить форму на эту страницу.Содержимое index.html.erb:

<%= form_tag(query_path, :method => "get") do %>
    <%= submit_tag("Go!") %>
<% end %>

Однако, rails выдает мне эту ошибку при загрузке страницы:

неопределенная локальная переменная или метод `query_path '

Вот что, я думаю, я хочу, чтобы произошло: я хочу другое действие в home_controller.rb, которое называется query (сейчас единственное действие в этом контроллере - index).Это query действие - это действие, которое вызывается из моей формы, когда вы нажимаете "Go!"Как мне это сделать?Что должно быть там вместо query_path?

Редактировать:

Мне кажется, что должен быть более простой ответ на этот вопрос, а не модификация routes.rb файл.Как я думаю об этом бизнесе маршрутизации неправильно?В моей голове, любое действие на моей странице должно по умолчанию использовать контроллер для существующей страницы.Поэтому, если я нахожусь на моей index.html.erb странице, которая принадлежит моему home_controller.rb, мой :action => 'query' должен по умолчанию искать действие в моем home_controller.rb. Почему этого не происходит? Это именно то, что я хочу, чтобы произошло.

Может быть, я думаю об этом совершенно неправильно, именно поэтому мы вместе разрабатываем решение.Вот что я хочу: я хочу, чтобы пользователь нажимал кнопку, которая заставляет приложение запрашивать внешний API, получать JSON и отображать содержимое JSON.В моей голове это означало, что кнопка переходит к другому действию в том же контроллере, который запрашивает внешний API и передает JSON обратно для отображения на той же самой странице (все это с Ajax).Я неправильно подхожу к этой проблеме?

Ответы [ 2 ]

1 голос
/ 25 апреля 2011

Похоже, что вам нужно сделать, это добавить маршрут в config / rout.rb. Вы можете просмотреть текущие названия маршрутов с помощью rake routes. Пример маршрута ниже

# Will create query_path mapping to home.query action
match 'home/query' => 'home#query', :as => :query

Редактировать

Вы должны определить это явно, потому что rails3 по умолчанию не использует подстановочные знаки `[controller] / [action] '. Не рекомендуется для контроллеров RESTful. Если вы хотите снова включить эту функцию, есть пример, который вы можете раскомментировать в rout.rb, но это не рекомендуется.

0 голосов
/ 25 апреля 2011

Во-первых, вам, вероятно, нужен пост вместо get. Форма будет выглядеть так:

<%= form_tag query_path do %>
    ... (your form elements here)
    <%= submit_tag "Submit" %> 
<% end %>  

Указанный путь запроса - это именованный маршрут. Для вашего случая вам понадобится что-то подобное в вашем маршруте.rb:

  scope :path => '/home', :controller => :home do
    post  'query' => :query, :as => 'query'
  end  

РЕДАКТИРОВАТЬ:

Если это действительно метод get, просто добавьте: method => "get" в форму и измените маршрут на:

  scope :path => '/home', :controller => :home do
    get  'query' => :query, :as => 'query'
  end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...