2012-01-30 5 views
0

Я пытаюсь создать очень простой сайт для отправки и получения параметров из URL (или ссылки), приложение должно поддерживать любое количество параметров, то есть http://localhost:3000/action=receive&controller=pages&email=mail%40site.com&name=Vinny, а затем иметь возможность получать/распечатать их.Ошибка маршрутизации Rails 3.2.1

Я думаю, что я нашел проблему на своем маршруте. В настоящее время она выглядит следующим образом:

match 'pages/*params' => 'pages#receive' 

создать ссылку, посылающий Params, как это:

<%= link_to "Send Params", :action => "receive", :name => "Vinny", :email => "[email protected]" %> 

Когда я нажимаю на ссылку, я получаю следующее сообщение об ошибке.

No route matches [GET] "/assets" 

И URL выглядит следующим образом:

http://localhost:3000/assets?action=receive&controller=pages&email=mail%40site.com&name=Vinny

Примечание активов?.

Если мой маршрут вместо выглядит следующим образом:

match 'pages/:name/:email' => 'pages#receive' 

Это работает, но тогда я ограничен указанным Params.

Любые советы о том, как решить эту проблему, были бы замечательными.

+0

Так что жесткая кодировка маршрута к контроллеру 'pages' (с параметрами) работает, даже если you'r e доступ к контроллеру «активов»? Что делать, если вы специально ссылались на активы: match 'assets/* params' ... – BryanH

+0

@BryanH Привет, нет Я не указал или не создал контроллер под названием Assets, у меня есть только один контроллер, Pages. Не знаете, почему Rails добавляет активы? на мой URL-адрес. Однако я попытался удалить «активы?» Из URL-адреса, и у меня возникла другая проблема маршрутизации. Я довольно ржавый с Rails, это может быть неправильный способ отправки произвольных параметров на мой контроллер? – Anders

+0

@BryanH Хорошая идея, но это не помогло. :( – Anders

ответ

2

Хорошо, я думаю, что вижу, что происходит. Указание параметров в маршрутах не требуется, чтобы получить значения в действии контроллера. Таким образом, замените map вы указали ранее в routes.rb с

resources :pages 

Если добавить к вашей ссылке

:controller => "pages" 

Он должен перейти к соответствующему контроллеру + действие. (Это может быть необходимо в вашем случае)

В этом действии, вы можете захватить все Params из хэша

email = params[:email] 
account = params[:name] 

Etc.

+0

Спасибо, ваше предложение работает, но это не совсем тот результат, который я ищу. В моем первоначальном вопросе я, вероятно, не был достаточно ясен. Я хочу, чтобы вы могли отправлять произвольные параметры, ваше решение разрешает (!?!), например: email.Пользователь должен иметь возможность, например, добавить адрес = NY в URL-адрес, и страница должна его распечатать. Не знаю, возможно ли использовать для этого ссылку link_to. Возможно, придется использовать некоторые вещи CGI просто (link_to было бы предпочтительнее). – Anders

+0

Спасибо за ссылки, проверит их. – Anders

+0

Ahh Я не вводил во все параметры, потому что я ленивый (отсюда и т. Д.). Вы можете получить значение * любого * параметра 'variable = params [: имя_параметра]', где 'parameter_name' - это имя параметра. :) – BryanH