首页 文章

合并3个选择字段并在我的用户模型中在rails 3上的ruby中验证为一个

提问于
浏览
1

好的,我有3个选择框用于选择出生日期 .

我在用户模型中设置常量以提供数月,数年等 .

无论如何,我可以单独成功验证这些选择框 .

What I want to do 将:day,:month和:year组合并存储在:birthday并将整个日期验证为一个,这样我就可以返回1个错误,而不是3个单独的错误 .

此外,这样可以更轻松地将验证日期存储在我的数据库中的生日字段中 .

Part of my form

<td> <%= f.input :day, :required => false, :label => "Birthday: " , :prompt => "Day", :collection => User::DAYS  %></td>
 <td> <%= f.input :month, :label => false, :prompt => "Month", :collection => User::MONTHS %> </td> 
 <td> <%= f.input :year, :label => false, :prompt => "Year", :collection => User::YEAR_RANGE %> </td>

Part of User model

MONTHS = [“January”,1],[“February”,2],[“March”,3],[“April”,4],[“May”,5],[“June”,6] ,[“七月”,7],[“八月”,8],[“九月”,9],[“十月”,10],[“十一月”,11],[“十二月”,12]#完成这个DAYS = 1..31#完成此START_YEAR = Time.now.year - 106 END_YEAR = Time.now.year YEAR_RANGE = START_YEAR..END_YEAR class User <ActiveRecord :: Base attr_accessor:day,:month,:year validates_presence_of: day,:message =>'你出生在一个月的哪一天?' validates_presence_of:month,:message =>'你出生在哪个月?' validates_presence_of:year,:message =>'你的出生年份是多少?'结束

2 回答

  • 0

    我会将列更改为datetime(日期似乎永远不适合我) .

    t.datetime :birthday
    

    然后在视图中使用date_select .

    <div class="field">
        <%= f.label :birthday %>
    <%= f.date_select :birthday, :include_blank => true, :start_year => Time.now.year - 70 %> </div>

    然后在您的模型中验证生日存在 .

    validates_presence_of :birthday
    

    如果您需要确保生日年龄超过特定年龄,请编写自定义验证 .

    validate :of_certain_age
    
    private
    
      def of_certain_age
        if self.birthday
          errors.add(:base, 'You need to be at least 18.') if self.birthday > 18.years.ago
        end
      end
    
  • 2

    除非我完全忽略了你的观点,否则你只需要一个自定义验证 . 这是如何做到这一点的一个例子 .

    -----开始模型代码------

    validate :check_date_validity
    
    def check_date_validity 
    
      date_submitted = Date.strptime("#{self.year}/#{self.month}/#{self.day}" , "%Y/%m/%d")
      errors.add(:birthday, "does not look right") if date_submitted < Date.today  #for example
    
    end
    

    -----开始查看代码------

    <%= f.select( :day, User::DAYS ) %>
    
    <%= f.select( :month, User::MONTHS ) %>
    
    <%= f.select( :year, User::YEAR_RANGE ) %>
    

    有关详细信息,请参阅rails guides documentation for custom validation .

相关问题