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

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
39025a7f572d6fe464e1fe6be399ca3b?d=identicon&s=25 Mike Dershowitz (mdersh53)
on 2007-03-11 16:40
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 %>
<tr class="spacerH10">
<td colspan=3></td>
</tr>

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

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
C041c0b87f840fe5b9145a0e9961d6ec?d=identicon&s=25 Ahmad (Guest)
on 2007-03-12 09: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:

partial:
<% index = Time.now.tv_sec %>
<input id="attachment_data" name="attachment[<%=index%>][data]"
size="30" type="file" />


On Mar 11, 6:40 pm, Mike Dershowitz <rails-mailing-l...@andreas-s.net>
F82a441e09b4725a51db48b6639ae82c?d=identicon&s=25 Jatinder Singh (Guest)
on 2007-03-21 11: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.


Regards
Jatinder
This topic is locked and can not be replied to.