Forum: Ruby on Rails RJS & increment variable - this is an interesting one

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Mike D. (Guest)
on 2007-03-11 17:40

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


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 %>
<tr class="spacerH10">
<td colspan=3></td>

<td width="38%">
<b>Task <%= @task %>:<b><br />
<td width="62%">
<%= text_field_tag("task#{@task}", nil, {}) %><br />

Controller method for the page (simple):

  def multiple
  @task = 3

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


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.

Ahmad (Guest)
on 2007-03-12 10:57
(Received via mailing list)
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:

<% index = %>
<input id="attachment_data" name="attachment[<%=index%>][data]"
size="30" type="file" />

On Mar 11, 6:40 pm, Mike D. <removed_email_address@domain.invalid>
Jatinder S. (Guest)
on 2007-03-21 12:00
(Received via mailing list)
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.

This topic is locked and can not be replied to.