将rails类型的数据转换为日期

时间:2016-02-25 04:32:47

标签: jquery ruby-on-rails date

以这种方式这可能是不可能的。但是,在我的数据库模式中,我的anticipated_arrival_date文件中有一个名为t.date的字段schema.rb

我目前正在使用jQuery来抓取三个不同的<select>字符串,并将它们连接成一个字符串,用以下格式"dd/mm/yyyy"表示日期。我通过以下方式执行此操作:

$("#arrival_year").blur(function(){
var month = $('#arrival_month').val();
var day = $('#arrival_day').val();
var year = $('#arrival_year').val();

if (month == "" || day=="" || year==""){
}
else{
  //DD/MM/YYYY
  combined = String(day) + "/" +String(month)+"/"+ String(year); 
  var arrival_date = $('#school_application_anticipated_arrival_date');
  arrival_date.val(combined);
}
});

其中#school_application_anctipated_arrival_date是我的模型上的t.date字段,我在f.hidden_field中将<form>作为undefined method `<=' for nil:NilClass if record.anticipated_arrival_date != nil and ((record.start_date <= record.anticipated_arrival_date) or ((record.start_date - record.anticipated_arrival_date).to_i >= 7)) 。问题是,当我通过POST请求提交表单时,我收到以下错误:

ancitipated_arrival_date

在我的anticipated_arrival_date验证中抛出。简而言之,它是t.date未定义。

是否A)以某种方式可以在调用create时从字符串中生成有效的anticipated_arrival_date?如果没有,有没有办法,假设将date迁移到字符串而不是anticipated_arrival_date,我可以在从date到另一列的验证中进行安全比较。真正的strftime列?例如,在date列上使用class AnticipatedArrivalDateValidator < ActiveModel::Validator def validate(record) if record.anticipated_arrival_date != nil and ((record.start_date <= record.anticipated_arrival_date) or ((record.start_date - record.anticipated_arrival_date).to_i >= 7)) record.errors[:base] << "Cannot have arrival date be later or equal to start date for Early Night Arrival." end end end

这是我完整的控制器文件:

https://gist.github.com/anonymous/9f31c26f6c38fe3e21bb

以下是执行验证的模型文件的摘录:

before_action

注意:在参考评论中,我尝试通过以下before_action :cleanup_date_params def cleanup_date_params if params[:school_application] anticipated_string = params[:school_application][:anticipated_arrival_date] params[:school_application][:anticipated_arrival_date] = Date.parse(anticipated_string) Rails.logger.debug(Date.parse(anticipated_string)) end end

将参数转换为日期
undefined method `<=' for nil:NilClass

问题是这仍然导致错误:

before_action

在我的验证中调用了同一行。

我认为,params[:school_application][:anticipated_arrival_date]并未更改.create,因为在params[:school_application]的强参数版本上调用了before_action,因此必须覆盖我设置的参数sed "s/Read/\n/g" /tmp/Air/test.txt | tail -1 test.txt | grep ARP 。我不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

使用to_date函数将字符串转换为日期并比较模型验证中的日期而不是字符串。

&#13;
&#13;
2.1.5 :006 > date = "02/03/2016"
 => "02/03/2016" 
2.1.5 :007 > changed_date = date.to_date
 => Wed, 02 Mar 2016
 
def create
  object = object_params
  object[:date] = object[:date].to_date
  
  /** code of cretae **/
end
&#13;
&#13;
&#13;

然后使用验证。 refer to this link

答案 1 :(得分:1)

更改

combined = String(day) + "/" +String(month)+"/"+ String(year);

combined = new Date(year, month, day);

Rails应该处理将此格式转换为date

JS Date