我有一个带日期选择的表单。
我有以下表格:
<%= date_select :user, :birthday, {:start_year => Time.now.year, :end_year => 1910,:order => [:day,:month,:year], :prompt => { :day => 'day', :month => 'month', :year => 'year' }}, { :class => "default" } %>
我的模型验证:
validates :birthday, :if => :should_validate_birthday?,
:presence => {:message => "Please enter your friend's birthdate"},
:date => { :after => Date.civil(1910,1,1), :before => Date.today, :message => "Please enter a valid date"}
以下是用户在日志中提交的内容的示例:
"user"=>{"name"=>"rewrwe", "birthday(3i)"=>"1", "birthday(2i)"=>"", "birthday(1i)"=>"2008", "email"=>""}}
请注意,该月的值为空白。
在控制器中我创建用户
create
@user = User.new(params[:user])
If @user.save
#go to the confirm page
end
end
即使缺少月份,也不会显示任何错误消息,因为出于某种原因,当我尝试保存模型时,它会将空月转换为“1月”或01。
由于我不希望用户意外提交错误数据,这非常令人沮丧。
如何阻止Rails执行此操作并确保提交所有日期信息?
答案 0 :(得分:1)
将这三个字段与attr_accessor
:
class User < ActiveRecord::Base
attr_accessor :birthday_year, :birthday_month, :birthday_date
validates_presence_of :birthday_year, :birthday_month, :birthday_date
# ...
end
然后在你看来,每个人都有不同的选择。这就是date_select的所有功能,但它会在视图中将它们分开,而不是在模型中,这使得很难验证每个字段。