2010-11-05 5 views
1

Comment transmettre des paramètres à une application Rails à l'aide d'une URL Web normale?Passer des paramètres via l'adresse URL

Par exemple, si je ..

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

J'ai donc créé un contrôleur appelé listes et je veux passer un nom, l'âge et une étiquette ..

Dans mon exemple, je passe ..

name = Paul age = 39 tag = misc

Mon exemple ci-dessus indique que l'élément a été créé mais que l'élément ajouté contient des données vides, ce qui suggère que mon formatage est incorrect.

Quelqu'un pourrait-il me dire comment je structure l'URL ci-dessus pour passer les paramètres correctement?

Merci Paul

+0

comment diable écrivez-vous à 0.0.0.0? –

+0

hmm c'est l'adresse par défaut à laquelle on me dit de me connecter quand je lance script/server, j'ai aussi essayé localhost: 3000 mais toujours les mêmes problèmes, tout est testé localement en ce moment – Azalar

Répondre

3

Par défaut, le routage RESTful Rails interdit l'action create via le protocole GET (url régulière). Pour votre exemple précis, vous devez ajouter cette route vers votre fichier config/routes.rb:

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

Cela ajoute un itinéraire create_list_path ou create_list_url accessible via GET pour des liens, etc. L'URL utilisée pour créer une liste directement serait:

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

Notez également que si vous obtenez des erreurs sur les jetons d'authenticité non valides, vous devrez peut-être ajouter cette ligne à votre contrôleur:

skip_before_filter :verify_authenticity_token, :only => :create 

Pour les cas plus généraux, vous configurez les routes et les formes De même comme suit:

Vous devez spécifier dans votre :method => 'get'form_tag.

Ceci est décrit dans le guide Ruby on Rails Form Helpers (recherchez "A Generic Search Form").

Le code de base étant donné que si vous commencer est

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

génère

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

qui GET s l'url: http://my.server/search?q={query input}&commit=Search.

+0

Je n'ai pas vraiment le mien forme à ce stade, autre que ce que l'échafaud aurait généré – Azalar

+0

Dans la forme générée par échafaudage, vous devriez être en mesure d'ajouter ': method => 'get'' pour mettre les paramètres dans l'url. –

+0

Y at-il de toute façon de faire cela sans formulaires, je veux finalement être en mesure de simplement appeler l'URL en passant quelques paramètres afin qu'il n'utilise pas de formulaires du tout – Azalar

Questions connexes