Ruby on rails 有人能解释Rails质量分配和验证的这种奇怪行为吗

Ruby on rails 有人能解释Rails质量分配和验证的这种奇怪行为吗,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,mass-assignment,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Mass Assignment,注意:在回答问题之前,请理解这与attr\u accessible或attr\u protected无关,所讨论的导轨是3.1.3和Ruby1.9.2p290 没有更多的原因在这里我的参数,我试图大规模分配到DriverLicense模型 {"utf8"=>"✓", "authenticity_token"=>"cKhruPzVvBK63bqCQPFY8xPZb12V5lhLPOpXgjIToJk=", "driver_license"=> {"license_num

注意:在回答问题之前,请理解这与attr\u accessibleattr\u protected无关,所讨论的导轨是3.1.3和Ruby1.9.2p290

没有更多的原因在这里我的参数,我试图大规模分配到DriverLicense模型

 {"utf8"=>"✓",
 "authenticity_token"=>"cKhruPzVvBK63bqCQPFY8xPZb12V5lhLPOpXgjIToJk=",
 "driver_license"=>
  {"license_number"=>"LICENCE-001",
   "license_class"=>"A-CLASS",
   "validity_start_date"=>"02/01/2011",
   "validity_end_date"=>"08/24/2011",
   "issuing_authority"=>"RTO",
   "remarks"=>"Remarks .."},
 "save_button"=>"Save",
 "action"=>"create",
 "controller"=>"driver_licenses",
 "driver_id"=>"2"}
这里是控制器代码

@driver_license = @driver.driver_licenses.new(params[:driver_license])
模型的定义如下

class DriverLicense < ActiveRecord::Base
    acts_as_tenant(:tenant)
    validates :driver_id,:license_number,:validity_start_date,:validity_end_date,:presence => true  
    validate :date_validity ,:if => :is_date_present?

    validate :overlapping_validity,:if => :validity_start_date_present? 

    belongs_to :driver

    scope :active_licenses , where('validity_start_date <= ? and validity_end_date >= ?',Date.today,Date.today) 


    .... ....
    .... ....

    private
    def is_date_present?
        validity_start_date.present? and validity_end_date.present?
    end 


    def date_validity
      errors.add(:validity_start_date,"must be earlier then validity end date") if validity_start_date > validity_end_date
    end

    def validity_start_date_present?
        validity_start_date.present?
    end 


    def overlapping_validity
        arel =  self.class.where('validity_end_date >= ?',validity_start_date).where('driver_id = ?',driver_id)     
        arel = arel.where('id != ?',id) if id.present?      
        unless arel.count.zero?
            errors.add(:validity_start_date,"overLapping date with other licenses")
        end 
    end 

end
class DriverLicensetrue
验证:日期有效性,:如果=>:是否存在日期?
验证:重叠的有效性,:如果=>:有效性\u开始\u日期\u存在?
属于:司机
范围:活动许可证,其中('validity\u start\u date=?',date.today,date.today)
.... ....
.... ....
私有的
def是否有日期?
有效期\开始日期\当前日期?有效期?结束日期?现在?
结束
def日期\有效期
错误。如果有效期开始日期>有效期结束日期,则添加(:有效期开始日期,“必须早于有效期结束日期”)
结束
定义有效期\开始\日期\是否存在?
有效期\开始日期\当前日期?
结束
def重叠有效性
arel=self.class.where('validity\u end\u date>=?',validity\u start\u date)。where('driver\u id=?',driver\u id)
arel=arel.where('id!=?',id),如果id.present?
除非是零号?
错误。添加(:有效期\开始\日期,“与其他许可证重叠的日期”)
结束
结束
结束
“体量”属性适用于除“有效性”\u“结束”\u“日期”之外的所有属性

#<DriverLicense id: nil, driver_id: 2, license_number: "LICENCE-001", license_class: "A-CLASS", issuing_authority: "RTO", validity_start_date: "2011-01-02", validity_end_date: nil, remarks: "Remarks ..", tenant_id: 2, created_at: nil, updated_at: nil>
#
Once可以在屏幕截图上进一步检查,其中质量分配适用于除有效性\u结束日期之外的所有属性


发现两边的日期格式不一样
&因此,它将其设置为零