рельсы удалить has_one: через ассоциацию - PullRequest
2 голосов
/ 01 марта 2012

У меня есть следующие отношения данных:

model A has_one B, :through => C
model A has_one C, :dependent => :destroy

model B has_many C, :dependent => :destroy
model B has_many A, :through => C

model C belongs_to A
model C belongs_to B

скажем, у меня есть объект a (тип A) и объект b (тип B) и ab = b, я хочу удалить ассоциацию.

то, что я сейчас делаю, это b.as.delete (@a), он удаляет строку из таблицы C, но ab остается действительным, даже если я пытаюсь сделать ab = nil, он остается действительным со старымvalue.

Я только что обнаружил, что если это происходит только в том случае, если я добавляю ассоциацию с помощью ab = b, если я добавляю ее с помощью b.as << a, то при удалении все работает нормально, как и ожидалось ..1008 * <p>что я делаю не так?

update - если я делаю a.reload, значение обновляется до nil, также в случае, когда я создал ассоциацию с ab = b, я не хочуиспользуйте перезагрузку, чтобы получить правильное значение.почему это происходит только в этом случае, а не в b.as << a case? </p>

1 Ответ

1 голос
/ 01 марта 2012

Метод активной записи delete удаляет только строку объекта, на который вы ссылаетесь, и не учитывает ваши отношения :dependent => :destroy.

Вместо этого вы должны использовать метод destroy, и это также будет способствовать уничтожению, как вы определили.

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