Séparé de la date et de l'heure de champs de formulaire dans les Rails
J'ai un ActiveRecord modèle Event
avec une colonne datetime starts_at
. Je voudrais présenter une forme, où la date et l'heure pour starts_at
sont choisis séparément (p. ex. "23-10-2010"
de la date et de "18:00"
pour l'instant). Ces champs doivent être soutenus par la seule colonne starts_at
, et les validations doivent de préférence être contre starts_at
, trop.
Je peux bien sûr muck autour avec les attributs virtuels et des crochets, mais je voudrais une solution plus élégante. J'ai expérimenté avec les deux composed_of
(rdoc), et l'attribut-décorateur (phare de discussion, github) sans succès.
Ci-dessous est une ébauche de ce que je voudrais..
class Event < ActiveRecord::Base
validates_presence_of :start_date
end
# View
# On submission this should set start_date.
form_for @event do |f|
f.text_field :starts_at_date # date-part of start_date
f.text_field :starts_at_time_of_day # time-of-day-part of start_date
f.submit
end
Toute aide appréciée.
- J'ai couru dans quelques temps maintenant, mais je n'ai pas encore trouvé une belle solution. La raison pour le partage de l'est si je peux utiliser un datepicker et la time_select séparément.
Vous devez vous connecter pour publier un commentaire.
Était à la recherche à ce sujet aujourd'hui pour un Rails de projet, et suis tombé sur ce petit bijou:
https://github.com/shekibobo/time_splitter
Semble que ça peut faire le travail pour vous
Avez-vous d'avoir un
text_field
dans la vue?Aussi loin que je peux dire, vous pouvez avoir un
date_time
champ puis il suffit d'utiliser deux différents champs de saisie pour définir les différentes parties du domaine.Depuis les rails de la date et de l'heure sélectionnez les aides à cinq paramètres différents (
starts_at(1i)
pour l'année la partie,2i
pour la partie mois, et ainsi de suite), ce qui signifie que ladate_select
définit uniquement pour la partie de la date, alors que si vous passez:ignore_date => true
à latime_select
, il suffira de régler l'heure et la minute de la partie.Si vous devez avoir un
text_field
je ne suis pas sûr de savoir comment le faire, mais il pourrait être possible de le faire à l'aide de certains jQuery magie avant de définir les paramètres de type dateheure avant l'envoi du formulaire.À l'aide d'un
date_select
ettime_select
est une bonne façon d'aller.Cependant, je voulais un
text_field
pour la date (si je peux utiliser un JavaScript sélecteur de date).À l'aide de strong_parameters ou des Rails 4+:
modèles/l'événement.rb
vues/événements/_form.html.haml
contrôleurs/events_controller.rb
!!
dans le si la comparaison? Que signifie?Solution élégante peut fournir date_time_attribute gem:
Il va vous permettre de définir
starts_at_date
etstarts_at_time
séparément:Il vous permettra également de jouer avec les fuseaux horaires, l'utilisation Chronique, etc.
date_select
ettext_field
? Je n'étais pas en mesure d'utiliser untext_field
ettime_select
et il n'y a pas de documentation montrant que vous le pouvez.Est-ce à cause d'un problème de conception? Il est vraiment beaucoup plus facile si vous venez d'enregistrer starts_at comme un type de données datetime et d'utiliser quelque chose comme:
http://puna.net.nz/timepicker.htm#
Il fonctionne tout simplement sur le dessus de ce que les champs de date que vous avez pour votre modèle.