Rails - ActiveRecord - Как он заполняет объекты и отношения? - PullRequest
1 голос
/ 16 сентября 2011

Я заметил, что программным путем переход от родительского объекта к дочернему объекту, а затем обратно, что родительский объект, который я получаю, не совпадает с исходным.

Например:

Родительский класс: Car

Детский класс: Seat

A car имеет много seats

puts(@car.to_s) => a memory address

puts(@car.seats.first.car.to_s) => totally different address

Я заметил это, потому что недавно я добавил новое строковое поле в Car через миграцию, и, пытаясь прочитать его, перебирая отношения обратно с места, это поле всегда было нулевым! Однако, добавив поле в представление скаффолда и проверив базу данных, появятся новое поле и значения.

Это странно, потому что все старые поля доступны. Это только новый, которого нет. Для чего бы то ни было, второе-последнее поле также является строкой.

Что происходит под капотом? Что мне нужно сделать? Спасибо!

1 Ответ

0 голосов
/ 16 сентября 2011

Предположим, под классом Parent и Child вы имеете в виду Car has_many Seats. Вы можете попытаться сообщить ActiveRecord, что одно отношение является обратным другому.

class Car < ActiveRecord::Base
    has_many :seats, :inverse_of => :car
end

class Seat < ActiveRecord::Base
    belongs_to :car, :inverse_of => :seats
end

Итак, цитируя документацию по Rails, вы получите такие вещи:

d = Dungeon.first
t = d.traps.first
d.level == t.dungeon.level # => true
d.level = 10
d.level == t.dungeon.level # => true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...