现在我将日期保存为格式为mm / dd / yyyy的字符串,但想转换为date_select但由于某种原因我一直收到错误。
这是我正在使用的代码 表格
<%= f.date_select :start_date %>
模型
validates :start_date, :presence => true
但我从控制器那里得到一个错误,说它不符合参数。
答案 0 :(得分:1)
这是因为Rails自动查看数据库列以确定将在哪里存储的对象类型。在这种情况下,Rails正在寻找一个与date_select帮助器一起使用的Datetime列,而是找到一个varchar列。
我会运行迁移以删除start_date列,并将其重新添加为datetime列,如此
要生成新迁移:
rails generate migration [name of your migration]
在你的情况下:
rails generate migration change_start_date_column_to_timestamp
这将在RAILS_ROOT / db / migrations文件夹中生成一个文件,该文件类似于:
class ChangeStartDateColumnToTimestamp < ActiveRecord::Migration
def self.up
end
def self.down
end
end
你需要修改它看起来像:
class ChangeStartDateColumnToTimestamp < ActiveRecord::Migration
def self.up
remove_column :table_name, :start_date
add_column :table_name, :start_date, :timestamp
end
def self.down
remove_column :table_name, :start_date
add_column :table_name, :start_date, :string
end
end
然后,当rails从数据库中提取数据时,它会自动将它们转换为Ruby Time对象。
请注意......这将破坏start_date字段中的数据。因此,如果您预先存在需要保留的信息,则需要执行更复杂的操作。