user938363
user938363

Reputation: 10350

How to add selection box dynamically in rails 3.1.0?

Here is a partial form _standards.html.erb we want to add to the view dynamically:

  <p><%= f.association :standards, :collection => Standard.active_std.all(:order => 'name'), :label_method => :name, :value_method => :id :include_blank => true %></p>

Here is the view form itself _form_new.html.erb which calls _standards.html.erb:

<%= simple_form_for @rfq do |f| %>    

  <div id="std">
  <%= render :partial => 'standards/standards', :collection => @rfq.standards, :locals => { :f => f } %>
  </div>
  <%= link_to_function("Add std", nil) do |page| %> 
    page.insert_html :bottom, 'std', :partial => 'standards/standards', :object => @rfq.standards.build 
  <% end %> 

  <%= f.button :submit, 'Save' %>  
<% end %> 

This solution did not work as link_to_function was not reacting to click by loading the _standards.html.erb. This solution seems out of date and does not work in rails 3.1.0. I am wondering if there is other solution to add dynamic content to the view page in rails 3.1.0. If you do, please don't hesitate to post. Thanks.

Upvotes: 0

Views: 438

Answers (1)

Jeff Steil
Jeff Steil

Reputation: 1770

I know this answer is coming months after you need it but hopefully this helps someone else who stumbles across this question. Here is how you can dynamically add a selection box unobtrusively for your example.

_form_new.html.erb

<%= simple_form_for @rfq do |f| %> 

  <a id="add-selection-box" href="#">Add Selection Box</a>
  <div id="std"></div>

  <script type="text/javascript">
    $(document).ready(function(){
      $("#add-selection-box").click(function() {  
        $("#std").append("<%= escape_javascript(render(:partial => 'standards/standards', :collection => @rfq.standards, :locals => { :f => f })) %>");
      });
    });
  </script>
<% end %>

Here is how you can do it using link_to_function

_form_new.html.erb

<%= simple_form_for @rfq do |f| %>
  <%= add_selection_box "Add Selection Box", @rfq.standards, f %>
  <div id="std"></div>
<% end %>

helpers/my_form_helper.rb

module MyFormHelper
  def add_selection_box(name, collection, form)
    page = %{
      partial = "#{escape_javascript(render(:partial => "standards/standards", :collection => collection, :locals => { :f => form }))}";

      $("#std").append(partial);
    }

    link_to_function name, page
  end
end

Upvotes: 2

Related Questions