2009-10-21 4 views
0

Je voudrais créer un formulaire d'enregistrement d'utilisateur où l'utilisateur coche certaines cases qui ne se connectent pas au modèle. Par exemple, il peut y avoir une boîte de 'conditions & conditions' que je ne veux pas avoir un champ booléen dans le modèle utilisateur en disant 'coché Conditions & conditions'. Au lieu de cela, je veux créer un enregistrement ailleurs (comme une transaction) qui a enregistré la date/heure qu'ils ont accepté le T & Cs.Formtastic et Formtaghelper

Un autre exemple pourrait être une préférence qu'ils ont indiqué que je vais utiliser plus tard et maintenez dans la session pour l'instant, comme «se souvenir de moi».

Je peux mélanger ces types de champs avec l'aide de formulaire ordinaire. Comment pourrais-je faire l'un des exemples ci-dessus en utilisant formtastic? Il s'agit en quelque sorte de mélanger des étiquettes de rails traditionnelles avec un joli code formlastic propre.

Répondre

1

Vous pouvez créer un nombre illimité d'attributs virtuels dans votre modèle qui n'ont pas nécessairement besoin d'être liés à une colonne de base de données. Ajouter attr_accessor: terms_and_conditions à votre modèle d'utilisateur rendra ce champ disponible pour formtastic - même s'il ne s'agit pas d'un champ de base de données. Vous pouvez le valider comme n'importe quel autre champ ou créer votre propre méthode de setter pour créer un enregistrement ailleurs si c'est ce dont vous avez besoin.

0

Au lieu de cela, je veux créer un enregistrement un autre (comme une transaction) qui a enregistré la date/heure, ils ont accepté le T & Cs.

Utilisez l'attribut attr_accessor décrit par bensie pour intégrer le champ à formtastic.

Formtastic est sur la logique de vue, tandis que les relations sont plus de logique de modèle. Ne vous inquiétez pas de la création de l'enregistrement associé dans le formulaire. Au lieu de cela, utilisez des rappels comme before_update et after_save dans le modèle pour vous assurer que l'enregistrement associé a été créé.

1

Je suis en désaccord avec l'approche d'utiliser attr_accessors pour les éléments d'entrée spécifiques à l'action. Si Ts & Cs doit être enregistré alors cela a du sens, mais parfois vous avez besoin de données qui n'ont aucun rapport avec le modèle et qui sont uniquement liées à l'action spécifique, comme «effectuer une opération lourde lors de l'exécution de l'action». Disons que vous avez un formulaire d'inscription, que vous n'utilisez pas OAuth et que vous avez la possibilité de spécifier le nom d'utilisateur et le mot de passe de twitter lors de l'inscription. Cela est bien:

<%= form.input :twitter_username %> 
<%= form.input :twitter_password, :as => :password %> 

Mais peu en dessous de moi embrouille - comme son formtastic dans ce cas est de prendre effectivement loin ce qui est déjà là. Existe-t-il un moyen d'ajouter params [: your-object] tout en restant formastic pour faire tout son joli layout?

Que diriez-vous:

class User < ActiveRecord::Base 
... 
    #I don't want this here. Its only for UserController#create. 
    #attr_accessor :tweet_when_signed_up 
... 
end 

et:

<%= form.input :tweet_when_signed_up, :as => :checkbox, :param_only => true %> 

param_only est ma suggestion maquillée. Il dit 'ceci n'est même pas une propriété transitoire. C'est juste pour cette action.La capacité de faire cela est probablement là - est-ce que quelqu'un sait comment faire efficacement ce que je pense est une bonne idée ci-dessus?

merci!

Questions connexes