我有一个ActiveRecord,当我点击保存时,所有记录都会保存,但日期除外。
我的控制器
class UsersController < ApplicationController
def create
puts params[:user]
@user1 = User.new(params[:user])
if @user1.save
saveduser = User.where("fbid = ?",params[:user][:fbid])
unless saveduser.first.nil?
session[:user] = saveduser.first
end
puts "user saved "
redirect_to "/users/dashboard"
else
puts "error while saving user"
end
end
视图
<h3>User Details</h3>
<%= form_for(@user) do |f| %>
<table>
--some columns
<tr>
<td><%= f.label :state %></td>
<td> <%= f.text_field :state %></td>
</tr>
<tr>
<td><%= f.label :dob %></td>
<td> <%= f.text_field :dob %></td>
</tr>
<%= f.hidden_field :fbid %>
</table>
<%= f.submit %>
<% end %>
<table>
在UserController中调用create方法时的控制台中。我可以看到
{"username"=>"xxxx.xx.94", "firstname"=>"xxxx", "lastname"=>"Raxxstogi", "emaild"=>"xx.xxx@gmail.com", "city"=>"Los Angeles", "country"=>"USA", "state"=>"CA", "dob"=>"08/13/1983", "fbid"=>"xxx"}
我的数据库表格列是
dob | date | YES | | NULL |
哪里出错?
谢谢
答案 0 :(得分:2)
您正在使用表单中的text_field
保存到数据库中的Date
类型字段中。请尝试使用此处所述的日期帮助程序方法:
http://guides.rubyonrails.org/form_helpers.html#using-date-and-time-form-helpers
答案 1 :(得分:2)
Ruby不了解您的日期格式。您可以通过使用Date::strptime
显式解析日期来修复此问题,可能在模型中作为setter方法:
class User < ActiveRecord::Base
def dob=(date)
date = Date.strptime(date, '%m/%d/%Y') if date.is_a?(String)
write_attribute(:dob, date)
end
end
但是,我会建议在Rails中使用日期助手,除非你知道格式每次都是相同的。
答案 2 :(得分:0)
这可能是您日期格式的问题。您可以配置活动记录以接受此格式,也可以使用strftime或类似内容将日期参数转换为Date对象