/ / Passando parâmetros via url - ruby-on-rails

Passando parâmetros via url - ruby-on-rails

Como passo parâmetros para um aplicativo Rails usando um URL da Web normal?

Por exemplo, se eu tiver ..

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

Então, eu criei um controlador chamado lists e quero passar um nome, idade e uma tag.

No meu exemplo eu estou passando ..

name = Paul idade = 39 tag = misc

Meu exemplo colado acima diz que o item foi criado, mas o item adicionado possui dados vazios, sugerindo que minha formatação não está correta.

Alguém poderia me dizer como estruturo o URL acima para passar os parâmetros corretamente?

obrigado Paulo

Respostas:

3 para resposta № 1

Por padrão, o roteamento RESTful do Rails proíbe o create ação via GET protocolo (url regular). Para seu exemplo específico, você precisará adicionar esta rota ao seu arquivo config / routes.rb:

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

Isso adiciona uma rota create_list_path ou create_list_url acessível através de GET para links etc. O URL usado para criar uma lista diretamente seria:

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

Observe também que, se você estiver recebendo erros sobre tokens de autenticidade inválidos, pode ser necessário adicionar esta linha ao seu controlador:

skip_before_filter :verify_authenticity_token, :only => :create

Para casos mais gerais, você configura rotas da mesma forma e formulários da seguinte maneira:

Você precisa especificar :method => "get" na tua form_tag.

Isso é discutido no Auxiliares de formulário do Ruby on Rails guia (procure "Um formulário de pesquisa genérico").

O código básico fornecido para você começar é

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

gera

<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>

qual GETé o URL: http://my.server/search?q={query input}&commit=Search.