2015-09-25 2 views
0

j'ai une table mysql avec un champ nommé « expires » qui est de type datetimedatetime mysql formaté% m-% d-% Y renvoie une erreur de dépassement de gamme dans des rails forme

lorsque je visite le montage des rails page pour ce tableau, je veux afficher la date expires « mois/jour/année »

dans la vue, edit.html.erb je les suivantes

<%= form_for @client, url: {action: "update"} do |f| %> 
     ... 
    <div class="field"> 
     <%= f.label :expires, "Expires" %> 
     <%= f.text_field(:expires , :id => 'expires_on') %> 
    </div> 

et dans le contrôleur je

def edit 
    @client = Client.find(params[:id]) 
    @client.expires = @client.expires.strftime("%m/%d/%Y") 
end 

mais cela jette un « argument hors de portée » erreur si je mettre en forme « % d /% m /% Y » Je ne comprends pas l'erreur

Je devine que cela a à voir avec le enregistrement actif ne permettant pas le mois d'abord, mais est-il un moyen de contourner ce problème?

Répondre

0

Si vous devez absolument utiliser un champ formaté, vous pouvez ajouter un nouveau champ « virtuel » à votre modèle:

def expires_formatted 
    expires.strftime("%m/%d/%Y") 
end 

def expires_formatted=(val) 
    expires = Date.strptime(val, "%m/%d/%Y") 
end 

et utiliser expires_formatted au lieu de expires.

Mais je recommanderais d'utiliser jQuery UI datepicker pour modifier le champ de date. Vous pouvez également lire sur les implémentations des champs de date de Ryan Bates episode on RailsCasts.