日期格式在转换整个输入字符串之前结束

时间:2014-12-29 20:03:03

标签: ruby database ruby-on-rails-3 oracle validation

这是我的错误我使用得最好,我希望它更新我的sample_qty列,这个表没有id列,所以我做了一个解决方法,但即使这样做,我仍然得到这个错误。

ActiveRecord :: StatementInvalid(OCIError:ORA-01830:日期格式图片在转换整个输入字符串之前结束:SELECT“SAMPLE_QTY”。* FROM“SAMPLE_QTY”WHERE“SAMPLE_QTY”。“EMPLOYEE_ID”='JQIS'和“SAMPLE_QTY” 。“TRANSACTION_DATE”= TO_DATE('2014-11-13 00:00:00 UTC','YYYY-MM-DD HH24:MI:SS')按CREATE_DATE DESC排序:   app / controllers / samples_controller.rb:31:在`update'

Rails 3.1.8 Oracle DB

这是我的模特

default_scope order("CREATE_DATE DESC")
set_table_name :sample_qty
set_primary_keys :employee_id, :create_date
attr_accessible :sample_qty, :create_date
belongs_to :labor
paginates_per 20
validates :transaction_date,
        date: { after: Proc.new { Time.now },
                before: Proc.new { Time.now + 1.day } }

def transaction_date=(new_date)
  self[:transaction_date] = Date.strptime(new_date.to_s, "%m/%d/%Y")
end

def date=(new_date)
  if new_date.blank?
    self[:date] = nil
  else
    self[:date] = Date.strptime(new_date.to_s, "%m/%d/%Y")
  end
end

def create_date=(new_date)
  self[:create_date] = Date.strptime(new_date.to_s, "%m/%d/%Y")
end
end

这是我的控制器

def sample_qty
  @samples = Samples.find(params[:employee_id, :sample_qty])
end

 def edit
   @samples = Samples.find(params[:employee_id])
 end

 def update
   @employee_id = params[:id]
   @samples.assign_attributes({:create_date => Time.now.strftime("%Y-%m-%d")})
   @samples.update_attributes(params[:samples])
   @samples.validates_datetime :create_date
     respond_with_bip(@samples)
 end
 end

2 个答案:

答案 0 :(得分:0)

看起来你在做:

@samples.assign_attributes({:create_date => Time.now.strftime("%Y-%m-%d")})

但是你要解析不同的日期格式:

Date.strptime(new_date.to_s, "%m/%d/%Y")

其中一个用正斜线而不是破折号分隔。

答案 1 :(得分:0)

在引用的错误消息中,您有 "SAMPLE_QTY"."TRANSACTION_DATE" = TO_DATE('2014-11-13 00:00:00 UTC','YYYY-MM-DD HH24:MI:SS')
如果你可以摆脱UTC位(包括前面的空白),这就是图片没有相应的位置,它应该可以正常工作。
请参阅Oracle TO_DATE docu