2010-07-25 12 views

risposta

16

Ryan Bates ha davvero un grande spiegazione di tutto questo:

http://railscasts.com/episodes/213-calendars (versione precedente è possibile guardare gratis) http://railscasts.com/episodes/213-calendars-revised (versione rivista è necessario un abbonamento per guardare)

+0

Grazie, con questo collegamento ho risolto due problemi. Vorrei avere il tempo di vedere tutti i cast delle rotaie. – jonathanrz

+0

questo è fantastico se vogliamo aggiungere una data incasinata giorno del mese. – baash05

+0

C'è una versione più recente di questo episodio, vedere l'episodio rivisto: http://railscasts.com/episodes/213-calendars-revised – jasonleonhard

1

Se si utilizza Rails 3.0+, non è necessario fare altro che includere jQuery e jQuery UI perché jQuery è il framework JavaScript predefinito.

Se si utilizzano Rails precedenti alla 3.0 o si utilizza Prototype (o altro), è necessario utilizzare jQuery nella modalità noConflict. Assicurati di includere jQuery dopo Prototype (l'altra quadro) è stata eseguita utilizzando qualcosa di simile a:

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="jqueryui.js"></script> 
<script type="text/javascript"> 
    jQuery.noConflict(); 
    jQuery(document).ready(function($) { 
    // here the $ function is jQuery's because it's an argument 
    // to the ready handler 
    $('#dateField').datepicker(); 
    }); 
    // here the $ function is Prototype's 
</script> 
+0

Questo si applica solo alle versioni di Rails precedenti alla 3.0; jQuery è il nuovo predefinito. –

+0

@tharrison grazie per averlo indicato. Ho aggiornato. – tvanfosson

17

ho costruito un gioiello per gestire questa situazione:

https://github.com/albertopq/jquery_datepicker

Spero che aiuti qualcun altro.

+1

Questo non funziona se la pipeline degli asset è abilitata, poiché non è possibile installare jquery il modo in cui il plugin richiede a meno che tu non disabiliti la pipeline. –

+0

Ho aggiornato la gemma. Dovrebbe funzionare bene ora con la pipeline. – albertopq

+2

https://github.com/joliss/jquery-ui-rails sarebbe l'attuale scelta migliore perché puoi scegliere i moduli da includere. La tua gemma sembra includere l'intera libreria ui. Adoro la tua estensione timepicker! –

4

Ho usato il jquery_datepicker di albertopq che menziona albertopq e funziona con moduli regolari, attributi nidificati, ecc. Ha reso le cose molto facili per me. jquery_datepicker passa anche correttamente le opzioni alle chiamate javascript necessarie di datepicker.

Ecco un esempio di uno dei miei moduli annidati:

<%= f.datepicker 'availability', :minDate => 0, :maxDate => "+8Y", :tab_index => autotab %> 

MinDate e MaxDate vengono passati al datepicker e tab_index viene messo nel campo di testo HTML. (l'autotab è solo il mio aiuto di forma per far avanzare la scheda + 1 ... meglio per me che l'hardcoding).

5

A partire da ora, consiglierei jquery-ui-rails gem sopra le altre risposte per il semplice motivo che è possibile includere solo le risorse datepicker senza l'intera libreria ui jquery!

https://github.com/joliss/jquery-ui-rails

1

Può essere un po 'tardi, ma io uso un semplice gioiello:

Gemfile: gem 'jquery-ui-rails'

application.js: //= require jquery-ui

application.css *= require jquery-ui

E poi: Bundle install

Fonte: https://github.com/joliss/jquery-ui-rails

2

Aggiornamento per Rails 5.x

Fase 1.Installare il jquery-ui-rails gemma

# gemfile 
gem 'jquery-ui-rails' 

# app/assets/javascripts/application.js 
//= require jquery-ui/widgets/datepicker 

# app/assets/stylesheets/application.css 
*= require jquery-ui/datepicker 

Fase 2. Supponendo di avere una risorsa chiamata evento con una data o datetime campo chiamato: inizio, poi nella forma rendere il: avviare campo di un campo di testo.

# app/views/events/_form.html.erb 
<%= f.label :start, 'Start Date' %> 
<%= f.text_field :start %> 

Passaggio 3. Aggiungi javascript (nella sintassi di CoffeeScript qui). Line1) Se hai Turbolinks abilitati (Turbolinks accelera la pagina di Rails si carica quando fai clic su un link caricandolo con AJAX) devi aggiungere un wrapper o la funzione JavaScript non verrà caricata quando navighi sulla pagina da un collegamento interno .

Linea2) Hai scelto come target l'id dell'elemento nel modulo. Rails assegna automaticamente un ID all'input del modulo combinando il nome del modello e il nome del campo.

Line3) È necessario impostare dataFormat perché jQuery-UI e Rails utilizzano diversi formati di data predefiniti.

# app/assets/javascripts/event.coffee 
$(document).on 'turbolinks:load', -> 
    $('#event_start').datepicker 
    dateFormat: 'yy-mm-dd' 

Per Rails 4 tutto è uguale tranne la prima riga nel file JavaScript (o CoffeeScript). Il wrapper per caricare JavaScript quando Turbolinks è abilitato in Rails 4 è:

$(document).on "page:change", -> 
+0

Puoi aggiungere un esempio per Rails 4? Sono in procinto di aggiornare un'app da 3 a 4 e 'jquery_datepicker' ha smesso di funzionare, quindi utilizzerò la soluzione. Se sto usando la gemma dei turbolinks in rails 4, questa soluzione dovrebbe funzionare per me ancora giusta? – DJTripleThreat

+0

Sembra che la tua soluzione funzioni anche su Rails 4. – DJTripleThreat

+1

DJTripleThreat - Per Rails 4 tutto sarebbe lo stesso ad eccezione del wrapper JavaScript (o in questo caso CoffeeScript) da eseguire con Turbolinks. Ho modificato la mia risposta sopra per aggiungere la modifica. –