首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能解释一下这种奇怪的Rails大规模分配和验证行为吗?

有人能解释一下这种奇怪的Rails大规模分配和验证行为吗?
EN

Stack Overflow用户
提问于 2013-01-01 08:54:11
回答 1查看 205关注 0票数 0

注意:在回答问题之前,请理解这不需要对attr_accessibleattr_protected做任何事情,RAILS的问题是3.1.3和Ruby1.9.2p290

没有更多的东西在这里,我试着把我的参数分配给DriverLicense模型

代码语言:javascript
复制
 {"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"}

这里是控制器代码

代码语言:javascript
复制
@driver_license = @driver.driver_licenses.new(params[:driver_license])

这里,模型的定义如下所示

代码语言:javascript
复制
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

质量属性适用于除validity_end_date以外的所有属性。

代码语言:javascript
复制
#<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>

也可以在屏幕截图上进一步检查,除了 validity_end_date以外,所有属性的大量赋值都是工作的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-01 09:14:51

发现双方的日期格式不相同。

&因此它将其设置为零。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14109132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档