In my rails application I have dragdrop.js.erb in /assets/javascript folder. In which I have an ajax block which should render a partial in a div with an on click action. I tried many things but I can't get it working. Any help would be appreciated.
Here is the code:
$.ajax({
type: "GET",
url: "<%= Rails.application.routes.url_helpers.cookbooks_path %>",
success: function(resp){
$("#property").load("<%= escape_javascript (render :partial => 'recipes/package_form') %>")
}
Your problem is that you are trying to use render
in assets
, however, render
is not available in assets
You should move your .js.erb
file to an appropriate directory under app/views
Here are some other similar question:
Asset Pipeline
Firstly, you need to make sure that you don't use any Rails dynamic path helpers in your javascript directly.
The issue is that if you pre-compile your asset pipeline, you'll typically find these dynamic path helpers won't work correctly. Although there's nothing "wrong" with it - I tend to keep Rails back-end code completely separate from the front-end, as to ensure the versatility of the application:
#app/assets/javascripts/application.js
$(document).on("click", ".element", function(){
$.ajax({
type: "GET",
url: "/cookbooks"
});
});
This will send a "naked" Ajax request (no params / body) to your controller backend:
#app/controllers/cookbooks_controller.rb
Class CookbooksController < ApplicationController
def index
@cookbooks = Cookbook.all
respond_to do |format|
format.html
format.js #-> loads /views/cookbooks/index.js.erb
end
end
end
The trick here is that you can now populate your index.js.erb
file with the params necessary to render the partial:
#app/views/cookbooks/index.js.erb
$("#property").html("<%=j render :partial => 'recipes/package_form' %>")
--
This should work for you
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With