Changin var from partial


#1

Hello,

I have a simple link_to_function to add a group of form fiels, to use
observe_field I must have unique names…

I created a var to store the itens count but the partial is not
updating it’s value.


_form.html.erb

<% @count = 0 %> <%= add_product_link "New product" %>

quotes_helper.rb

module QuotesHelper

def add_product_link(name)
link_to_function name do |page|
@atual = @atual + 1
page.insert_html :bottom, :products, :partial =>
“quote_product”, :object => QuoteProduct.new
end
end

end


_quote_product.html.erb

<% fields_for "quote[product_attributes][]", quote_product do |f| %>
  <p>

    <%= @count %>
    <%= f.select :product_id, @products, {}, :index => nil, :prompt

=> “Escolha uma opção…” %>
<%= f.text_field :quantity, :size => 12, :index => nil %>
<%= f.select :colors, 1…4, {}, :index => nil %>
<%= f.text_field :discount, :size => 12, :index => nil % >
<%= @count = @count + 1 %>

<% end %>


Does anyone have any tip on it?

thanks

Luciano


#2

On Mar 18, 5:14 pm, Luciano removed_email_address@domain.invalid wrote:

Hello,

I have a simple link_to_function to add a group of form fiels, to use
observe_field I must have unique names…

I created a var to store the itens count but the partial is not
updating it’s value.

I think there’s two things happening here. My understanding of the
matter is that when a template is rendered it will get a copy of the
controllers instance variables. Changes it makes to those instance
won’t persist though (the next template rendered will get a fresh copy
of those instance variables).

However I think you’re actually falling down another whole: you’re
expecting each click on the add product link to re-evaluate the
template. This cannot happen: link_to_function produces entirely
client side javascript: your _quote_product.html.erb is only rendered
once. If you look at the html source of your page you’ll see than
rendered html as a literal inside a blob of javascript.

Fred


#3

Hi Fred,

thanks for your advice!

Do you believe link_to_remote would be the solution here?

Luciano

On Mar 18, 2:28 pm, Frederick C. removed_email_address@domain.invalid


#4

On Mar 18, 6:14 pm, Luciano removed_email_address@domain.invalid wrote:

Hi Fred,

thanks for your advice!

Do you believe link_to_remote would be the solution here?

link_to_remote is a possibility, although you’d have to pass some
parameter in to let it know what id it should generate. This sort of
thing can get quite messy - you might find the nicest way out would
involve writing client side code that would gsub the generated html to
stick in an appropriate id (since it’s easy for the client side code
to test whether a dom element with a given id already exists) or to
just always generate a unique id (eg based on the current time in
milliseconds)

Fred


#5

Hi,

Did you manage to get this working? I’m having exactly the same issue
whereby I need to observe a field within a dynamically inserted
partial, e.g:

......<%=

observe_field :text_1 %>

......<%=

observe_field :text_2 %>

......<%=

observe_field :text_3 %>

I need to be able to generate the text_1, text_2, text_3, etc. id’s
dynamically, preferably using javascript, and then observe them with
the Rail’s observe_field helper. However, because the partial is only
rendered once, each row ends up with the same id.

Kind regards,
Chris


#6

Fred,

this milliseconds idea is just great!

I think I can make it work this way.

thank your very much!

Luciano

On Mar 18, 3:43 pm, Frederick C. removed_email_address@domain.invalid