2016-05-18 2 views
0

Ich verwende Rails 4.2.3. In meinem Modell habe ich ein Feld, das die Zeit aufzeichnet, die jemand brauchte, um etwas zu tun. Es ist ein Feld namens "time_in_ms", das eine Ganzzahl in meiner PostGresql-Datenbank ist. Meine Frage ist, in meiner Form möchte ich nicht, dass der Benutzer in Millisekunden eingeben muss, ich möchte sie lieber aus Stunden, Minuten und Sekunden auswählen lassen. Wie richte ich das in meinem Rails-Formular ein? Da es keine solche Felder in meinem Modell sind, weiß ich nicht, was in meinem „collection_select“ setzen Attribute ...In Rails, wie ordne ich ein Millisekundenfeld Stunden, Minuten und Sekunden Felder?

<div class="field"> 
    <%= f.label "Time" %> 
    <%= collection_select(:time_unit, :time_unit, @hours, {:prompt => true}) %> hrs 
    <%= collection_select(:time_unit, :time_unit, @minutes, {:prompt => true}) %> min 
    <%= collection_select(:time_unit, :time_unit, @seconds, {:prompt => true}) %> sec 
    <%= f.hidden_field :time_in_ms, :validate => true %> 
    </div> 

Wie schreibe ich richtig und Pre-bevölkern die Wähler auf der Grundlage meiner Single „time_in_ms“ Feld in meinem Modell?

Danke, - Dave

Antwort

0

Wie Sie Ihren Controller nicht erwähnt haben, gehe ich davon aus den Controller als TimersController. Sie müssen Änderungen in der Ansicht sowie in der Methode timer_params im Controller vornehmen. Hier

ist der Code auf Ansicht:

<div class="field"> 
    <%= f.label "Time" %> 
    <%= select_tag('timer[hour]', options_for_select((1..12).to_a), {:prompt => 'Select Hour'}) %> hrs 
    <%= select_tag('timer[minute]', options_for_select((1..60).to_a), {:prompt => 'Select Minutes'}) %> min 
    <%= select_tag('timer[second]', options_for_select((1..60).to_a), {:prompt => 'Select Minutes'}) %> sec 
    <%#= f.number_field :time_in_ms %> 
    </div> 

und hier ist der Code auf Controller:

def create 
    @timer = Timer.new(timer_params) 

    respond_to do |format| 
     if @timer.save 
     format.html { redirect_to @timer, notice: 'Timer was successfully created.' } 
     format.json { render :show, status: :created, location: @timer } 
     else 
     format.html { render :new } 
     format.json { render json: @timer.errors, status: :unprocessable_entity }  
     end 
    end 
end 


def timer_params 
    # Main Code goes here 
    params.require(:timer).permit(:time_in_ms) 
    params[:timer][:time_in_ms] = (params[:timer][:hour].to_i * 60 * 60 + params[:timer][:minute].to_i * 60 + params[:timer][:second].to_i) * 1000 
end 

ich die Validierung Teil verlassen haben. Sie können das sowohl auf der Clientseite als auch auf der Serverseite implementieren.

Verwandte Themen