Проблемы с ActiveRecord после определенного количества столбцов в таблице - PullRequest
1 голос
/ 04 января 2011

Впервые у меня была эта проблема, как неделю назад, и я думаю, что этот факт не очень хорошо объяснен, главным образом потому, что я не мог выделить проблему ... очевидно, теперь у меня есть ... но все еще не знаю ее природу

У меня есть миграция, которая выглядит следующим образом:

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 столбцов (включая идентификатор, который создается по умолчанию). Создание девятого столбца или даже больше повредит все, а потом я Я получаю все виды не правильной информации по моему мнению. Я должен сказать, что когда из консоли rails я что-то сохраняю, а затем проверяю это из командной строки mysql, тогда информация в порядке .... так чего же не хватает в ActiveRecord?

вывод для:

Не могли бы вы запустить show create table users\G из консоли mysql?

  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

1 Ответ

1 голос
/ 05 января 2011

Итак, наконец, после пары дней борьбы, вчера я нашел

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 и теперь все работает как надо. Не показывает полную схему моей БД и при извлечении из нее данных больше не повреждается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...