2011-01-16 2 views
0

J'ai une forme qui accepte params URL (pour soutenir un bookmarklet) qui ressemble et fonctionne comme ceci:Si/moins Conditionals dans form_for/ERB

<%= f.url_field :url, :value => params[:u] %> 

Cependant, lors d'une nouvelle rendu (en cas de erreur de validation, par exemple, le contenu est dépouillé

ce que je voudrais faire est de mettre quelque chose comme, de sorte que :value => est seulement rendu s'il y a params en premier lieu.

<%= f.url_field :url, :value => params[:u] if params[:u] %> 

Bien sûr, cela ne rend même pas le champ et est faux. Comment ajouter si/à moins que conditionals dans un bloc ERB? La recherche sans fin n'a pas beaucoup augmenté, mais je cherche probablement la mauvaise chose.

Répondre

0

Farnoy's answer était très proche, mais plus précisément, il a été:

<%= f.url_field :url, :value => (params[:u] || @resource[:url]) %> 

Comme @resource était l'objet modèle.

1

Try This ...

<%= f.url_field :url, :value => (params[:u] if params[:u]) %> 
+0

Bizarrement, cela fonctionne pour text_area mais pas pour n'importe quel champ (les vide toujours). – innonate

+0

Je crois que la meilleure méthode serait d'utiliser le contrôleur pour définir les paramètres. – halfcube

0

(j'ai mal lu votre question. Probablement pas la réponse ...)

Essayez dans votre vue

<%= f.url_field @url %> 

et dans votre contrôleur mettre

@url = Url.new(params[:u]) 

Cela w ay, vous aurez un formulaire avec les champs remplis sauf si params est nil.

0

Pour un one-liner, essayez:

<%= f.url_field :url, :value => (params[:u] || 'any_other_value_or_just_nil') %> 
Questions connexes