2012-03-23 2 views
0

Я столкнулся с странной проблемой, так как я обновился до Rails 3.2.Вложенные объекты и размер коллекции

У моего приложения есть некоторые объекты, управляемые с помощью nested_forms, но когда я пытаюсь достичь размера коллекции после создания нового вложенного объекта, вложенный объект берется в счет.

Для экс .:

1.9.3p0 :004 > e = Expense.last 
    Expense Load (22.6ms) (...) 
=> #<Expense id: 1, (...) 
1.9.3p0 :005 > e.comments.size 
    (0.3ms) SELECT COUNT(*) (...) 
=> 0 
1.9.3p0 :006 > e.comments.build 
=> #<Comment id: nil, content: nil, commentable_id: 1, commentable_type: "Expense", created_at: nil, updated_at: nil, creator_id: nil> 
1.9.3p0 :007 > e.comments.size 
=> 1 

В этом случае, я ожидаю, что e.expense.size возвращает 0, так как Comment объект не сохранен.

ответ

0

Построение комментария создает ... 1 комментарий. Он не существует в базе данных (пока), поэтому e.commment.count вернет 0, но он существует в приложении, поэтому size возвращает 1. Так что это имеет смысл.

Но я вижу, что здесь есть небольшой потенциально неожиданный результат. Если комментарий не существует в памяти, похоже, что Rails проверяет с помощью БД (SELECT COUNT(*)...), тогда как если он находит его в памяти, это не так.

Интересно, что произойдет, если у вас уже есть несколько существующих комментариев, а затем отметьте e.comments.size в этом случае?

Какая версия Rails вы исходите из того, что работало по-другому?

+0

Возможно, это не с момента обновления, может быть, я просто этого не заметил раньше. Дело в том, что я вхожу в это поведение, когда я вызываю 'для комментариев в e.comments', а так как только что построенный комментарий еще не сохранен, он также вызывает некоторую ошибку – AkyRhO

Смежные вопросы