# +1 == +3

**URL:** <https://www.ruby-forum.com/t/1-3/127615>\
**Category:** Rails\
**Created:** [January 30, 2008, 9:10pm UTC](https://www.ruby-forum.com/t/1-3/127615 "2008-01-30T21:10:38Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Glen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/8c91f0/32.png) [@Glen](https://www.ruby-forum.com/u/Glen)\
**Post date:** [January 30, 2008, 9:10pm UTC](https://www.ruby-forum.com/t/1-3/127615/1 "2008-01-30T21:10:38Z")

</div>

I have the following code (relevant section offset with dashes):

def create  
@post = Post.new(params[:post])  
@post.user\_id = session[:user].id  
@post.conversation\_id = params[:conversation\_id]

```
@conversation = Conversation.find(params[:conversation_id])

replies = @conversation.replies + 1

@posts = Post.find(:all, :conditions => ["conversation_id = ?",

```

params[:conversation\_id]])

* * *

```
@user = User.find(session[:user].id)
@user.num_posts = session[:user].num_posts + 1

if @post.save
  Conversation.update(params[:conversation_id], { :updated_at =>

```

Time.now, :replies =\> replies })  
User.update(session[:user].id, { :num\_posts =\>  
(session[:user].num\_posts += 1) })  
@user.update  
session[:user] = @user  
@posts \<\< @post  
render :partial =\> “conversations/post”  
else

* * *

```
  render :action => 'new'
end

```

end

For reasons I can’t explain two odd things are happening. Firstly,  
the User.update line is never executed (at least no update on User  
shows in the log). Secondly after adding the @user code to increment  
post count it increments by 3 with each post. I did some playing  
around and if I add @user.num\_posts -= 2 after @user.num\_posts =  
session[:user].num\_posts + 1 it will increment by two. Yeah, after a  
net change of -1 in the value the total becomes 2 larger than it was.

I must be missing something really, really obvious but I can’t see it.

Help please!?

---

<div class="post-metadata">

**Author:** ![Glen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/8c91f0/32.png) [@Glen](https://www.ruby-forum.com/u/Glen)\
**Post date:** [January 30, 2008, 9:24pm UTC](https://www.ruby-forum.com/t/1-3/127615/2 "2008-01-30T21:24:45Z")

</div>

> ```
> if @post.save
> Conversation.update(params[:conversation_id], { :updated_at =>
> 
> ```
> 
> Time.now, :replies =\> replies })  
> User.update(session[:user].id, { :num\_posts =\>  
> (session[:user].num\_posts += 1) })

I assume the Conversation.update line is being called? i.e. that  
@post.save is successful and it actually enters the if statement?

---

<div class="post-metadata">

**Author:** ![Glen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/8c91f0/32.png) [@Glen](https://www.ruby-forum.com/u/Glen)\
**Post date:** [January 30, 2008, 9:28pm UTC](https://www.ruby-forum.com/t/1-3/127615/3 "2008-01-30T21:28:55Z")

</div>

Well, is there a reason for updating user twice? Aren’t session[:user]  
and @user supposed to represent the same object? If you’re doing what  
I think you are, shouldn’t you set @user =  
Users.find(session[:user].id), then operate only on @user- I wouldn’t  
store a user object in the session like that, and do work on it.

> > User.update(session[:user].id, { :num\_posts =\> (session[:user].num\_posts += 1) })  
> > @user.update

---

<div class="post-metadata">

**Author:** ![Glen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/8c91f0/32.png) [@Glen](https://www.ruby-forum.com/u/Glen)\
**Post date:** [January 30, 2008, 9:29pm UTC](https://www.ruby-forum.com/t/1-3/127615/4 "2008-01-30T21:29:31Z")

</div>

On Jan 30, 1:24 pm, Phil T. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> > ```
> > if @post.save
> > Conversation.update(params[:conversation_id], { :updated_at =>
> > 
> > ```
> > 
> > Time.now, :replies =\> replies })  
> > User.update(session[:user].id, { :num\_posts =\>  
> > (session[:user].num\_posts += 1) })
> 
> ## I assume the Conversation.update line is being called? i.e. that @post.save is successful and it actually enters the if statement?
> 
> Posted viahttp://www.ruby-forum.com/.

Yeah sorry should have mentioned that. It is only being called once  
too as the conversation count increments by one with each post.

---

<div class="post-metadata">

**Author:** ![Glen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/8c91f0/32.png) [@Glen](https://www.ruby-forum.com/u/Glen)\
**Post date:** [January 30, 2008, 9:58pm UTC](https://www.ruby-forum.com/t/1-3/127615/5 "2008-01-30T21:58:32Z")

</div>

On Jan 30, 1:28 pm, Glen [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > ## @post.save is successful and it actually enters the if statement?
> > 
> > Posted viahttp://www.ruby-forum.com/.
> 
> Yeah sorry should have mentioned that. It is only being called once  
> too as the conversation count increments by one with each post.

That did it. I didn’t realize that when I put an object into the  
session it gets looked up constantly.

Any idea why the User.update never runs?
