2010-02-17 16 views
3

Existe-t-il un moyen de passer des paramètres avec un appel link_to sans qu'il apparaisse sur l'URL? Je fais un simple système de classement par étoiles, et je fais essentiellement de chaque étoile un lien d'image qui transmet sa valeur en tant que paramètre à un nouveau rendu de la même page. Le code d'assistance ressemble à ceci:Comment passer les paramètres cachés dans "link_to"

def stars_generator(edit_mode = false) 

@rating = params[:stars].to_i #takes rating from page param, so :star must be defined first! 

@stars = Array.new(5) {|i| i+1} #change array size for more stars 
output = "<div class = 'star_container'>" 

case edit_mode #checks whether to display static stars or clickable stars 
when true 
    @stars.each do |star| #this block generates empty or colored stars depending the value of @rating and the position of the star evaluated 
    if star <= @rating 
     output += link_to image_tag('star_rated.png', :mouseover => 'star_hover.png'), review_new_url(:stars => star) 
    else 
     output += link_to image_tag('star_empty.png', :mouseover => 'star_hover.png'), review_new_url(:stars => star) 
    end 
    end 
when false #static stars are displayed if edit_mode is false 
    @stars.each do |star| 
    if star <= @rating 
     output += image_tag('star_rated.png') 
    else 
     output += image_tag('star_empty.png') 
    end 
    end 
end 

output += "</div>" 
return output 
end 

Cela fonctionne parfaitement, mais actuellement, le classement par étoiles apparaît comme un paramètre dans l'URL. Idéalement, je voudrais cacher cette information, et j'ai essayé à la fois hidden_field_tag ​​et hidden_tag, qui ne fonctionnent pas. Est-ce qu'il n'y a aucun moyen de le faire ou suis-je complètement Noob?

Répondre

0

vous pouvez essayer

link_to image_tag('star_rated.png', :mouseover => 'star_hover.png'), review_new_url(:stars => star), :method => :post 

cette injectera dynamiquement javascripts pour transformer les liens dans un formulaire et soumettre les paramètres grâce à l'affichage

espoir qui aide =)

+0

Hmm, en ajoutant la: méthode =>: post n'a rien fait pour moi, mais je n'ai pas de javascript dans le projet. Y a-t-il un moyen de le faire sans js? – funkymunky

+0

la seule façon d'obtenir des données sur le serveur web sans montrer l'URL est de poster un formulaire. Si vous n'avez pas de framework javascript pour les rails à utiliser, alors 'method:: post' ne fonctionnera pas, et vous devrez construire un formulaire standard, qui publie les champs cachés quand soumis. Vous pouvez avoir une image en tant que bouton de formulaire – maniacalrobot