# RJS & increment variable - this is an interesting one

**URL:** <https://www.ruby-forum.com/t/rjs-increment-variable-this-is-an-interesting-one/88469>\
**Category:** Rails\
**Created:** [March 11, 2007, 4:40pm UTC](https://www.ruby-forum.com/t/rjs-increment-variable-this-is-an-interesting-one/88469 "2007-03-11T16:40:50Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![miked](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ed655f/32.png) [@miked](https://www.ruby-forum.com/u/miked)\
**Post date:** [March 11, 2007, 4:40pm UTC](https://www.ruby-forum.com/t/rjs-increment-variable-this-is-an-interesting-one/88469/1 "2007-03-11T16:40:50Z")

</div>

Hi:

I have a small piece of code I’m injecting into a page using a partial  
and RJS. Trick is, the code I’m injecting is a form field, and the id  
needs to have a digit at the end of it so I can grab it when I submit  
the form. I can’t seem to get the partial to render with the variable  
incremented.

My RJS:

page.insert\_html :bottom, ‘new\_task’, :partial =\> ‘add\_new’  
page.visual\_effect :highlight, ‘new\_task’

My partial:

NOTE: here’s where it gets interesting - see the first line? I’m trying  
here to increment the instance variable @task. Note that this @task is  
set to 3 when the page itself (page = multiple) loads.

\<% @task = @task.succ %\>

**Task \<%= @task %\>:**  
  \<%= text\_field\_tag("task#{@task}", nil, {}) %\>  

Controller method for the page (simple):

def multiple  
@task = 3  
end

Controller method for the partial taks (“add\_new”)

NOTE: I’ve currently tried it as empty. When I have it as empty the  
variable never increments in the partial. When I have only one line in  
this method (@task = @task.succ), I get an error: “NoMethodError in  
Goals#add\_new”; When just set the instance variable (@task = 4), it  
comes through no problem, but it still doesn’t increment when the  
partial is rendered.

def add\_new

end

The key here is that this partial should be able to be injected into the  
form infintely, which is essentially what I want, but I can’t get it to  
increment correctly.

Thanks in advance for any help you can provide.

Mike

---

<div class="post-metadata">

**Author:** ![miked](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ed655f/32.png) [@miked](https://www.ruby-forum.com/u/miked)\
**Post date:** [March 12, 2007, 9:57am UTC](https://www.ruby-forum.com/t/rjs-increment-variable-this-is-an-interesting-one/88469/2 "2007-03-12T09:57:56Z")

</div>

I use the same idea for enabling users to add infinite number of  
attachments and other things. However, I don’t use a variable and  
increment, instead I use the time as follows:

partial:  
\<% index = Time.now.tv\_sec %\>

On Mar 11, 6:40 pm, Mike D. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![miked](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ed655f/32.png) [@miked](https://www.ruby-forum.com/u/miked)\
**Post date:** [March 21, 2007, 11:00am UTC](https://www.ruby-forum.com/t/rjs-increment-variable-this-is-an-interesting-one/88469/3 "2007-03-21T11:00:48Z")

</div>

Hi Mike,

when the action “add\_new” of controller “Goals” is called, a new  
instance of Goals controller is created and hence previous value of  
@task is no more accessible in add\_new.  
Hence when you have something like this "@task = @task.succ " in your  
add\_new method, it will give error, since @task is not defined and you  
are trying to invoke nil.succ.

You need to persist @task across requests, 1 way is to use sessions.  
Another approach could be the one mentioned by Ahmed.

Regards  
Jatinder
