2010-02-20 15 views
1

J'ai une application Rails 2.3.5 standard avec un modèle appelé Post. Post possède un attribut appelé URL, et le getter suivant est défini:Comment les méthodes de champ de saisie (text_area, text_field, etc.) obtiennent-elles des valeurs d'attribut à partir d'un enregistrement dans un bloc form_for?

def url 
    p = 'http://' 
    u = self[:url] 
    u.starts_with?(p) ? u : "#{p}#{u}" 
end 

Si je charge script/console, je peux faire Post.first.url et obtenir le résultat souhaité (par exemple, il retourne http://foo.com si elle est vraie valeur de l'attribut est foo.com)

Cependant, si j'ai un bloc form_for, et faire quelque chose comme form.text_field :url, il ne retourner l'URL http: // préfixé; au lieu de cela, il renvoie simplement foo.com

Comment est-ce que form_for accède aux attributs des modèles ActiveRecord? Il semble contourner les getters surchargés.

Répondre

1
def url_before_type_cast  
p = 'http://' 
u = self[:url].capitalize 
u.starts_with?(p) ? u : "#{p}#{u}"  
end 
+0

Merci; Est-ce que cela fonctionnera dans les deux contextes (form.text_field * et * doing @ post.url)? – Kyle

-1

Par vous renvoie des ensembles?

Le champ de texte affiche les données sur votre automate. (The Créer ou modifier en fonction)

Dans le contrôleur:

@post = Post.new(params[:post]) 
or 
@post.update_attributes(params[:post]) 

est l'endroit où le champ est défini.

Si vous souhaitez implémenter le setter pour ajouter le http: //, vous devez écrire votre fonction en tant que def url=.

+0

Salut. Je fais référence à la valeur du champ de texte qui est rempli par form.text_field: url – Kyle