Мне не удалось найти какую-либо документацию по методу .build в Rails (в настоящее время я использую 2.0.2).
Путем экспериментов кажется, что вы можете использовать метод сборки для добавления записи в has_many
отношение до того, как какая- либо запись будет сохранена.
Например:
class Dog < ActiveRecord::Base
has_many :tags
belongs_to :person
end
class Person < ActiveRecord::Base
has_many :dogs
end
# rails c
d = Dog.new
d.tags.build(:number => "123456")
d.save # => true
Это правильно спасет и собаку, и метку с внешними ключами. Похоже, в belongs_to
отношениях это не работает .
d = Dog.new
d.person.build # => nil object on nil.build
Я тоже пробовал
d = Dog.new
d.person = Person.new
d.save # => true
Внешний ключ в Dog
этом случае не устанавливается из-за того, что на момент сохранения у нового человека нет идентификатора, потому что он еще не был сохранен.
Мои вопросы:
Как работает сборка, чтобы Rails был достаточно умен, чтобы понять, как сохранять записи в правильном порядке?
Как я могу делать то же самое в
belongs_to
отношениях?Где найти документацию по этому методу?
Спасибо
источник
belongs_to
» и «Методы, добавленные пользователемhas_one
» . Дополнительную техническую документацию можно найти в документации API:belongs_to
иhas_one
.Ответы:
Где это задокументировано:
Из документации API под ассоциацией has_many в " Module ActiveRecord :: Associations :: ClassMethods "
Ответ на строительство в противоположном направлении - слегка измененный синтаксис. В вашем примере с собаками
или даже
Вы также можете использовать create_dog для мгновенного сохранения (подобно соответствующему методу create, который вы можете вызвать для коллекции)
Как рельсы достаточно умны? Это волшебство (точнее, я просто не знаю, очень хотелось бы узнать!)
источник
find_by_email
иfind_by_column_name
методов. Он преобразует переданный вами метод в строку, анализирует ее и пытается сопоставить с именами столбцов вашей таблицы.источник