Передача параметров через URL - PullRequest
1 голос
/ 06 ноября 2010

Как передать параметры в приложение Rails, используя обычный веб-URL?

Например, если у меня есть ..

http://0.0.0.0:3000/lists/create/list[name]=Paul&list[age]=39&list[tag]=misc

Итак, я создал контроллер с именемсписки и я хочу передать имя, возраст и тег ..

В моем примере я передаю ..

имя = Пол возраст = 39 тег = разное

Мой пример, который я вставил выше, говорит, что элемент был создан, но в добавляемом элементе есть пустые данные, что говорит о том, что мое форматирование неверно.

Может кто-нибудь сказать мне, как я структурирую URL выше для правильной передачи параметров?

Спасибо, Пол

1 Ответ

3 голосов
/ 06 ноября 2010

По умолчанию RESTful-маршрутизация Rails запрещает действие create по протоколу GET (обычный URL-адрес). Для вашего конкретного примера вам нужно добавить этот маршрут в ваш файл config / rout.rb:

map.create_list 'list/create', :controller => 'lists', :action => 'create', :conditions => { :method => :get }

Это добавляет маршрут create_list_path или create_list_url, который доступен через GET для ссылок и т. Д. URL, используемый для непосредственного создания списка, будет выглядеть следующим образом:

http://0.0.0.0:3000/lists/create?list[name]=Paul&list[age]=39&list[tag]=misc

Также обратите внимание, что если вы получаете ошибки о недопустимых токенах аутентификации, вам может потребоваться добавить эту строку в ваш контроллер:

skip_before_filter :verify_authenticity_token, :only => :create

В более общих случаях вы настраиваете маршруты аналогично и формируетесь следующим образом:

Вам необходимо указать :method => 'get' в вашем form_tag.

Это обсуждается в руководстве Ruby on Rails Helpers (поиск "Общая форма поиска").

Базовый код, который должен помочь вам начать работу, -

<%= form_tag(search_path, :method => "get") do %>
  <%= label_tag(:q, "Search for:") %>
  <%= text_field_tag(:q) %>
  <%= submit_tag("Search") %>
<% end %>

создает

<form action="/search" method="get">
  <label for="q">Search for:</label>
  <input id="q" name="q" type="text" />
  <input name="commit" type="submit" value="Search" />
</form>

который GET с URL: http://my.server/search?q={query input}&commit=Search.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...