【发布时间】:2015-11-10 21:19:36
【问题描述】:
我正在尝试确定在表单中验证 end_date 是否大于 start_date 的最佳方法。
如果有人不小心选择了大于 end_date 的 start_date,我不知道如何抛出错误。
在我的表单中,如果事件只有一天,我只能提交一个日期(我使用 javascript 将 start_date 选择值复制到 end_date 选择值中),或者如果事件是 start_date 和 end_date超过 24 小时。
屏幕截图中的以下场景应触发表单的第三个错误。
这是表格的相关部分:
event_form.html.erb
<%= form_for(@event, html: { multipart: true }) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="checkbox">
<label>
<%= f.check_box :single_day %> Is this a multi-day event?
</label>
</div>
<div class="field">
<%= f.label :start_date %><br />
<%= f.date_select :start_date, :start_year => Date.current.year, :end_year => 1900 %>
</div>
<div id="end_date_div" class="field">
<%= f.label :end_date %><br />
<%= f.date_select :end_date, :start_year => Date.current.year, :end_year => 1900 %>
</div>
<%= f.submit "Post", class: "btn btn-primary", :id=>"event_submit" %>
<% end %>
event.rb
class Event < ActiveRecord::Base
belongs_to :user
belongs_to :group
default_scope -> { order(created_at: :desc) }
mount_uploader :picture, PictureUploader
validates :user_id, presence: true
validates :title, presence: true
validates :content, presence: true
validate :picture_size
private
# Validates the size of an uploaded picture.
def picture_size
if picture.size > 5.megabytes
errors.add(:picture, "should be less than 5MB")
end
end
end
events_controller.erb
class EventsController < ApplicationController
before_action :logged_in_user, only: [:create, :destroy]
before_action :correct_user, only: :destroy
def create
@event = current_user.events.build(event_params)
if @event.save
flash[:success] = "Event created!"
redirect_to root_url
else
@feed_items = []
render 'static_pages/home'
end
end
def destroy
@event.destroy
flash[:success] = "Event deleted"
redirect_to request.referrer || root_url
end
private
def event_params
#may need to add the other variables here
params.require(:event).permit(:title, :content, :single_day, :start_date, :end_date, :picture)
end
def correct_user
@event = current_user.events.find_by(id: params[:id])
redirect_to root_url if @event.nil?
end
end
【问题讨论】:
标签: forms validation ruby-on-rails-4