我通过迁移向rails中的数据库添加了一个列,并更新了new.html.erb以将该字段添加到表单中。
正确的数据在请求参数中,但每次生成的插入查询都为该列的空值。
以下是请求参数:
{"commit"=>"Create",
"assignment"=>{"start_date"=>"08/04/2010",
"project_id"=>"5",
"allotment"=>"50",
"person_id"=>"33",
"end_date"=>"08/05/2010"},
"authenticity_token"=>"8f157a2a220caf716607162ce9557ab6505aab1a"}
以下是查询显示空列的结果错误:
Mysql::Error: Column 'end_date' cannot be null:
INSERT INTO `assignments` (`start_date`, `created_at`, `project_id`, `updated_at`, `allotment`, `person_id`, `end_date`)
VALUES('2010-08-04', '2010-08-04 03:36:21', 5, '2010-08-04 03:36:21', 50, 33, NULL)
以下是有问题的迁移:
class ChangeDates < ActiveRecord::Migration
def self.up
add_column :assignments, :end_date, :date, :null => false
rename_column :assignments, :date, :start_date
end
def self.down
remove_column :assignments, :end_date
rename_column :assignments, :start_date, :date
end
end
我无法弄清楚出了什么问题。我已经退回并转移了几次没有运气的变化。我很难过。
答案 0 :(得分:1)
为了回答关于attr_accessor的问题,scope将在类方法之前调用accessors方法,因此将值保存到访问器,但是当调用save时,它返回方法调用。我希望通过示例澄清它:http://codepad.org/gAppUMc4
我已经做了好几次同样的事情。它超级令人沮丧。
答案 1 :(得分:0)
如果您还没有,请尝试重新启动您的网络服务器。 Rails可能正在缓存列名。
您正在运行什么版本的Rails和哪些网络服务器?