MongoMapper, Rails, инкремент работает в консоли, но не в контроллере - PullRequest
0 голосов
/ 15 июня 2010

Я использую mongo_mapper 0.7.5 и rails 2.3.8, и у меня есть метод экземпляра, который работает в моей консоли, но не в контроллере моего реального приложения.Я понятия не имею, почему это так.

#controller
if @friendship.save
   user1.add_friend(user2)
...

#model
...
key :friends_count, Integer, :default => 0
key :followers_count, Integer, :default => 0

def add_friend(user)
   ...
   self.increment(:friends_count => 1)
   user.increment(:followers_count => 1)
   true
end

И это работает в консоли, но в контроллере это не меняет количество подписчиков, только количество друзей.Что дает?Единственное, о чем я могу думать, это то, что проблема, с которой я передаю пользователя, - это проблема, но я не уверен, как это исправить.

Ответы [ 2 ]

2 голосов
/ 15 июня 2010

Скорее всего, проблема в том, что приращение произошло, но вы не перезагрузили модель с данными из базы данных. Инкремент запускает запрос базы данных, но не обновляет экземпляр. Попробуйте @ Friends.reload и user.reload после вызова add_user в вашем контроллере.

0 голосов
/ 15 июня 2010

Похоже, вы не сохраняете user, поэтому попробуйте increment!. Этот метод сохранит user и вернет true, если запись может быть сохранена.

Редактировать

Я нашел другой способ сделать это (надеюсь, правильный):

User.increment(user.id, :followers_count => 1)

Я не проверял этот код! Но я надеюсь, что это работает.

...