在表中的一定量的列之后出现ActiveRecord问题

时间:2011-01-04 18:20:32

标签: 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)时它会起作用。创建第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_pa​​ssword”

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

1 个答案:

答案 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,现在一切都像它应该的那样。 它不显示我的数据库的完整模式,并且从中检索数据时不再被破坏