Rails日期由模型更改

时间:2011-10-10 08:58:20

标签: ruby-on-rails-3 date

我有一个带日期选择的表单。

我有以下表格:

<%= 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执行此操作并确保提交所有日期信息?

1 个答案:

答案 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的所有功能,但它会在视图中将它们分开,而不是在模型中,这使得很难验证每个字段。