我第一次遇到这个问题就像一个星期前一样,我猜这个事实并没有得到很好的解释,主要是因为我无法隔离问题......显然我现在......但仍然不知道它的性质
我的迁移类似于:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.references "faculty"
t.references "department"
t.references "role", :null => false
t.string "name", :null => false, :limit => 20
t.string "surname", :null => false, :limit => 20
t.string "username",:null => false, :limit => 25
t.string "study_group",:limit => 6
t.string "study_course",:limit => 50
t.string "card_code",:limit => 12
t.boolean "During_Day",:default => false
t.string "email", :limit => 100
t.string "hashed_password", :limit => 40
t.string "salt", :limit => 40
end
end
def self.down
drop_table :users
end
end
如果我开始从rails控制台创建用户并在尝试通过
恢复数据时保存它们 User.all
某些字段的信息会被破坏。我开始删除字段,当我离开前8列(包括默认创建的ID)时它会起作用。创建第9列甚至更多会损坏一切,然后我在我的观点中得到各种不正确的信息。 我必须说,当从rails控制台我保存一些东西然后从mysql命令行检查它然后信息很好....所以什么是ActiveRecord缺失?
输出:
你可以从mysql控制台运行
show create table users\G
吗?
mysql> show create table users\G
*************************** 1. row ***************************
Table: users
Create Table: CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`faculty_id` int(11) default NULL,
`department_id` int(11) default NULL,
`role_id` int(11) NOT NULL,
`name` varchar(20) NOT NULL,
`surname` varchar(20) NOT NULL,
`username` varchar(25) NOT NULL,
`study_group` varchar(6) default NULL,
`study_course` varchar(50) default NULL,
`card_code` varchar(15) default NULL,
`day_time` tinyint(1) default '0',
`email` varchar(100) default NULL,
`hashed_password` varchar(40) default NULL,
`salt` varchar(40) default NULL,
PRIMARY KEY (`id`),
KEY `faculty` (`faculty_id`),
KEY `department` (`department_id`),
KEY `role` (`role_id`),
KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.02 sec)
mysql>
从rails控制台添加用户
Loading development environment (Rails 3.0.3)
irb(main):001:0> me = User.new
=> #<User id: nil, faculty_id: nil, department_id: nil, role_id: nil,
name: "", surname: "", username: "", study_group: nil, study_cour
se: nil, card_code: nil, day_time: false, email: nil, hashed_password:
nil, salt: nil>
irb(main):002:0> me.name = 'Daniel'
=> "Daniel"
irb(main):003:0> me.surname = 'Garcia'
=> "Garcia"
irb(main):004:0> me.username = 'vinagrito'
=> "vinagrito"
irb(main):005:0> me.role_id = 1
=> 1
irb(main):006:0> me.save
=> false
irb(main):007:0> me.errors
=> {:password=>["is too short (minimum is 8 characters)"], :email=>["is
invalid", "can't be blank"]}
irb(main):008:0> me.password = '12345678'
=> "12345678"
irb(main):009:0> me.email = 'mail@mail.com'
=> "mail@mail.com"
irb(main):010:0> me.save
=> true
irb(main):011:0> me
=> #<User id: 2, faculty_id: nil, department_id: nil, role_id: 1, name:
"Daniel", surname: "Garcia", username: "vinagrito", study_group
: nil, study_course: nil, card_code: nil, day_time: false, email:
"mail@mail.com", hashed_password: "6305ee7016b263c0ec41a81439a378837a
318035", salt: "5c33e8fed10b87c9f4b7841f0faeb7b10424289a">
irb(main):013:0> user = User.where(:id => 2)
=> [#<User id: 2, faculty_id: nil, department_id: nil, role_id: 1, name:
"Daniel", surname: "Garcia", username: "vinagrito", study_grou
p: nil, study_course: nil, card_code: nil, day_time: false, email:
"mail@mail.com", hashed_password: 6305.0, salt: "5c33e8fed10b87c9f4b
7841f0faeb7b10424289a">]
看到它返回给我的“hashed_password”
development.log的输出
[1m[36mSQL (1.0ms)[0m [1mSHOW TABLES[0m
[1m[35mSQL (2.0ms)[0m SHOW TABLES
[1m[36mSQL (1.0ms)[0m [1mSELECT `schema_migrations`.`version` FROM
`schema_migrations`[0m
[1m[35mSQL (31.0ms)[0m CREATE TABLE `users` (`id` int(11) DEFAULT
NULL auto_increment PRIMARY KEY, `faculty_id` int(11), `department_id`
int(11), `role_id` int(11) NOT NULL, `name` varchar(20) NOT NULL,
`surname` varchar(20) NOT NULL, `username` varchar(25) NOT NULL,
`study_group` varchar(6), `study_course` varchar(50), `card_code`
varchar(15), `day_time` tinyint(1) DEFAULT 0, `email` varchar(100),
`hashed_password` varchar(40), `salt` varchar(40)) ENGINE=InnoDB
[1m[36mSQL (68.0ms)[0m [1mCREATE INDEX faculty ON
users(faculty_id)[0m
[1m[35mSQL (65.0ms)[0m CREATE INDEX department ON
users(department_id)
[1m[36mSQL (78.0ms)[0m [1mCREATE INDEX role ON users(role_id)[0m
[1m[35mSQL (80.8ms)[0m CREATE INDEX username ON users(username)
[1m[36mSQL (30.0ms)[0m [1mINSERT INTO `schema_migrations` (`version`)
VALUES ('20101226144503')[0m
[1m[35mSQL (7.0ms)[0m SHOW TABLES
[1m[36mSQL (3.0ms)[0m [1mSELECT `schema_migrations`.`version` FROM
`schema_migrations`[0m
[1m[35mSQL (2.0ms)[0m SHOW TABLES
[1m[36mSQL (7.0ms)[0m [1mdescribe `authors`[0m
[1m[35mSQL (2.0ms)[0m SHOW KEYS FROM `authors`
[1m[36mSQL (7.0ms)[0m [1mdescribe `book_loans`[0m
[1m[35mSQL (3.0ms)[0m SHOW KEYS FROM `book_loans`
[1m[36mSQL (7.0ms)[0m [1mdescribe `books`[0m
[1m[35mSQL (2.0ms)[0m SHOW KEYS FROM `books`
[1m[36mSQL (7.0ms)[0m [1mdescribe `departments`[0m
[1m[35mSQL (3.0ms)[0m SHOW KEYS FROM `departments`
[1m[36mSQL (8.0ms)[0m [1mdescribe `faculties`[0m
[1m[35mSQL (3.0ms)[0m SHOW KEYS FROM `faculties`
[1m[36mSQL (7.0ms)[0m [1mdescribe `roles`[0m
[1m[35mSQL (2.0ms)[0m SHOW KEYS FROM `roles`
[1m[36mSQL (7.0ms)[0m [1mdescribe `subjects`[0m
[1m[35mSQL (2.0ms)[0m SHOW KEYS FROM `subjects`
[1m[36mSQL (7.0ms)[0m [1mdescribe `users`[0m
[1m[35mSQL (1.0ms)[0m SHOW KEYS FROM `users`
[1m[36mSQL (0.0ms)[0m [1mSHOW TABLES[0m
[1m[35mSQL (0.0ms)[0m BEGIN
[1m[36mSQL (0.0ms)[0m [1mdescribe `users`[0m
[1m[35mAREL (0.0ms)[0m INSERT INTO `users` (`faculty_id`,
`department_id`, `role_id`, `name`, `surname`, `username`,
`study_group`, `study_course`, `card_code`, `day_time`, `email`,
`hashed_password`, `salt`) VALUES (NULL, NULL, 1, 'Daniel', 'Garcia',
'viangrito', NULL, NULL, NULL, 0, 'mail@mail.com',
'e1382ac8675daee167a262ee7ef3bd038f997c4a',
'a3518e0a6b273590073bd733e2ee692fbca28c2d')
[1m[36mSQL (15.6ms)[0m [1mCOMMIT[0m
答案 0 :(得分:1)
最后经过几天的挣扎,昨天我找到了
https://github.com/brianmario/mysql2/issues#issue/71
发现试图找到有类似问题的其他人 我不知道对于其他Windows用户是怎么回事,但我的schema.rb却没有向我展示任何模式:
ActiveRecord::Schema.define(:version => XXXXXXXXXXXXXX) do #my last migration version
#Could not dump table "table_name" beacuse of following ArgumentError
# invalid date
.
.
.# and so one for each table I had
end
所以我下载了mysql 5.1。来自http://dev.mysql.com/downloads/mysql/5.1.html,现在一切都像它应该的那样。 它不显示我的数据库的完整模式,并且从中检索数据时不再被破坏