mysql - 表中一定数量的列后 ActiveRecord 出现问题

标签 mysql activerecord ruby-on-rails-3

大约一周前我第一次遇到这个问题,我想这个事实没有得到很好的解释,主要是因为我无法隔离问题......显然现在我已经......但仍然不知道它的性质

我的迁移过程如下:

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)时它会起作用。创建第九列或更多列会损坏所有内容,之后我在我看来,得到各种不正确的信息。 我必须说,当我从 Rails 控制台保存一些东西,然后从 mysql 命令行检查它时,信息就没问题了……那么 ActiveRecord 缺少什么?

输出:

Could you run show create table users\G from mysql console?

  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_pa​​ssword”

开发日志的输出

 [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

最佳答案

经过几天的挣扎,终于在昨天找到了

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现在一切正常。 不是它显示了我的数据库的完整模式,并且从中检索数据时不再损坏

关于mysql - 表中一定数量的列后 ActiveRecord 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4596969/

相关文章:

PHP/AJAX : AJAX form doesn't remain at the same page after delete a data row

ruby-on-rails-3 - 如何配置 Active admin 支持 mongoid 和 active record?

ruby-on-rails - 将 Rails 自定义 SQL 查询映射到 ActiveRecord 模型

ruby-on-rails - 为路由添加约束以排除某些关键字

mysql - 如何仅在 MYSQL 数据库中查找和替换特定字符串的字符串

mysql - 有没有办法在 MySQL 的 TRUNCATE 或 DROP TABLE 上有效地 GRANT?

php - 如何自动删除数据库中存在一个月的mysql记录

ruby-on-rails - ActiveRecord "none"方法是如何使用 NullRelation 实现的?

ruby-on-rails-3 - 为每个子集选择具有最高值的记录

ruby-on-rails - 如何在宿主应用程序中呈现 Rails 引擎的 View