2016-04-02 6 views
1

fromto回確認したいと思います。 from>toの場合、エラーを表示したいと思います。Rails:時間を比較してエラーを表示する方法は?

コードを編集するにはどうすればよいですか?私はcoverincludeでいくつかのコードを試してみましたAlthogh

、私は私のコードに適用することはできませんでした。

<%= f.label :title %> 
<%= f.text_field :title, class: 'form-control' %> 
<br> 
    <%= f.label :departure_date %> 
    <div class="input-group date" id="datetimepicker"> 
    <%= f.text_field :departure_date, :value => (f.object.departure_date.strftime('%b/%d/%Y') if f.object.departure_date), class: 'form-control' %> 
    <span class="input-group-addon"> 
     <span class="glyphicon glyphicon-calendar"></span> 
    </span> 
    </div> 
    <script type="text/javascript"> 
    $(function() { 
     $('#datetimepicker').datetimepicker({format:'MMM-DD-YYYY'}); 
    }); 
    </script> 
    <br> 
    <div id="room"> 
    <%= f.simple_fields_for :rooms do |a| %> 
    <div id="room_<%= a.object.object_id %>"> 
     <p class="day-number-element-selector"><b>Day&nbsp;<%= a.index.to_i + 1 %></b></p> 

     <%= a.simple_fields_for :events do |e| %> 
     <span class="form-inline"> 
      <p> 
      <%= e.input :from, label: false %> 
      <%= e.input :to, label: false %> 
      </p> 
     </span> 
     <%= e.input :title, label: false %> 
     <% end %> 
    </div> 

    <%= a.link_to_add "Add event", :events, data: {target: "#room_#{a.object.object_id}"}, class: "btn btn-primary" %> 

    <%= a.input :room %> 

    <% end %> 
    </div> 

_schedule_form.html.erb

schema.rb

... 
create_table "events", force: :cascade do |t| 
    t.time  "from" 
    t.time  "to" 
... 

schedules_controller.rb

... 
    def new 
    @schedule = Schedule.new 
    room = @schedule.rooms.build 
    schedule.events.build 
    end 

    def create 
    @schedule = current_user.schedules.build(schedule_params) 
    if @schedule.save 
     flash[:success] = "schedule created!" 
     redirect_to root_url 
    else 
     render 'new' 
    end 
    end 

    def edit 
    @day_max = Room.where("schedule_id = ?", @schedule.id).maximum(:day) 
    end 

    def update 
    @schedule.rooms.maximum(:day) 
    if @schedule.update(schedule_params) 
     flash[:success] = "schedule updated!" 
     redirect_to root_url 
    else 
     render 'edit' 
    end 
    end 

Iエラーを確認して表示する方法を教えていただけたら幸いです。

答えて

1

documentationで説明されているように、イベントモデルにバリデーターを実装したいとします。

class Event < ActiveRecord::Base 
    validates :to, presence: true 
    validates :from, presence: true 
    validate do |e| 
    if e.from.present? && e.to.present? and e.from > e.to 
     e.errors[:base] << "To time must be after from time" 
    end 
    end 
end 
+1

@Ronnaさん、ありがとうございました。できます!!! – SamuraiBlue

+0

私は注意深く見ましたので、 'Rooms events base To time to time to'のようなモデル名がこのエラーに含まれています。 「時間はあとでする必要があります」だけを表示するにはどうすればよいですか? 'errors [:base]'( 'e'を取り除く)のようなコードを試しましたが、結果は同じです。あなたは私にヒントを与えていただければ幸いです。あなたの答えを受け入れた後、@Ronnaに再度尋ねて申し訳ありません。 – SamuraiBlue

+0

ここをクリックしてください:http://api.rubyonrails.org/classes/ActiveModel/Errors.html#method-i-add、person.errors.add(:name、 'must be implemented')、多分e.errors.add (:から、 "時間は時間から後である必要があります")、これはおそらくあなたのフォームの適切なフィールドにうまく対応します。いいえ? – Ronna

関連する問題