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 № 1Por 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
.