Mongomapper、Rails、Incrementはコンソールで動作しますが、コントローラーではありません

StackOverflow https://stackoverflow.com/questions/3041753

質問

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

これはコンソールで機能しますが、コントローラーではフォロワーカウントを変更しません。友人だけがカウントされます。何が与えるのですか?私が考えることさえできる唯一のことは、私がユーザーを渡す方法が問題であるということですが、それを修正する方法はわかりません。

役に立ちましたか?

解決

問題は、インクリメントが発生した可能性が最も高いことですが、データベースからのデータでモデルをリロードしていません。インクリメントはDBクエリを発射しますが、インスタンスを更新しません。コントローラーのADD_USER呼び出しの後、 @Friendship.reloadとuser.reloadを試してください。

他のヒント

あなたが救っていないようです user, 、だから試してみてください increment! 代わりは。この方法は、を保存します user レコードを保存できる場合はtrueを返します。

編集

私はそれを行う別の方法を見つけました(うまくいけば正しいもの):

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

このコードをテストしていません!しかし、私はそれがうまくいくことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top