Search code examples
ruby-on-railsajaxruby-on-rails-3.2form-fornested-form-for

form_for [@nested, @resource], remote => true responding with format.html rails 3.2.6


Can't get an ajax form_for to respect the format.js respond_to only responds with format.html. Any help much appreciated.

view

This view is called in partial by AJAX and then the user submits the form. Could the initial ajax call confuse the 'remote:true' of this form?

<%= form_for([@nested, @nested.resources.new], remote: true) do |i|%>
  <%= i.hidden_field :inviter_id, value: current_user.id %>
  <%= i.hidden_field :fb_pic_url, value: f['pic_square'] %>
  <%= i.hidden_field :name, value: f['name'] %>
  <%= i.hidden_field :uid, value: f['uid'] %>
  <%= i.submit "Invite", class:"btn btn-success invite_button" %>
<% end %>

routes.rb

resources :nested do 
  resources :resources
end

controller

def create
  code code code

  respond_to do |format|
    format.html { redirect_to @nested, notice: "Successfully Posted Nested" }
    format.json { render json: @nested, status: :created, location: @nested }
    format.js { render :nothing => true }
  end
end

create.js.erb Present but empty

application.html

<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>

application.js

//= require jquery
//= require jquery_ujs

Solution

  • Make sure you have the rails built-in non-intrusive jquery plugin included, since its responsible for making the remote: true code work.

    also, if you want to render the template create.js.erb you need to leave the row format.js without a block:

    respond_to do |format|
      ...
      format.js
    end
    

    Besides that, are you using the other response formats? json and html? if not, try to avoid putting them.