Изменения в немодели не добавление методов в классы - PullRequest
0 голосов
/ 24 января 2011

Я внес изменения в два класса, чтобы связать их таким образом

    class Account < ActiveRecord::Base
      belongs_to :customer,:foreign_key=>'name_id'
    end

    class Customer < ActiveRecord::Base
      has_many :accounts
    end

У меня есть данные в двух таблицах, в которых есть соответствующие ссылочный ключ 'name' в Customer и 'name_id' в Account.Но все же, когда я захожу в 'script / console' и набираю

                      Account.find(0).customer

, я получаю nil , даже когда есть совпадающие данные!В чем моя ошибка здесь?Извините, если это глупый вопрос, я новичок в рельсах

Ответы [ 4 ]

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

Если бы я подумал о вашем комментарии к Shyam. При добавлении ваших пользовательских ключей эти поля находятся в собственном файле миграции или они были включены в файлы миграции при первом запуске db: migrate? Если эти столбцы уже есть, то да, простое сохранение модели должно помочь.

Вы можете быстро: Account и Customer в вашей консоли rails, чтобы убедиться, что эти классы построены правильно, и именно эти проблемы ставят вас в известность.

Кстати, я бы как можно скорее отказался от использования имени в качестве первичного ключа. Это плохой дизайн и вызовет у вас головную боль в будущем. Это не просто рельсы, просто подумайте, сколько Джона Смита в телефонной книге? Затем вам придется использовать комбо-ключ с адресом, а может и больше, чтобы получить уникальную строку. И если подумать, у телефонной книги есть уникальный номер телефона в качестве идентификатора, он просто отсортирован по имени.

0 голосов
/ 24 января 2011

Вы действительно должны следовать соглашениям Rails: внешний ключ в вашей таблице accounts должен быть customer_id.Если изменить его на это, это решит проблемы, которые у вас есть.

0 голосов
/ 24 января 2011

Первичные ключи начинаются с 1, попробуйте: Account.find(1).customer

0 голосов
/ 24 января 2011

Если я правильно понимаю, я думаю, вам нужно установить :foreign_key и :primary_key для обеих ассоциаций.

class Account < ActiveRecord::Base
  belongs_to :customer,:foreign_key=>'name_id', :primary_key=>'name'
end

class Customer < ActiveRecord::Base
  has_many :accounts, :primary_key=>'name', :foreign_key=>'name_id'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...