Reputation: 4865
Suppose I make an ajax a call, from which I want to get some static template (app/views/static/some_template.html.erb), on which I want to act with some javascript stored here app/views/layouts/sign_in.js.erb
. Is it possible to render multiple file ? (because I want to keep separate my js files and my html files)
def ajax_call
respond_to do |format|
...
format.js {render 'layouts/sign_in.js.erb'}
end
end
Edit : here's my controller
respond_to do |format|
format.js {render 'devise/sessions/new.html.erb'}
end
In devise/sessions/new.html.erb
, I put
<div> test</div>
<%= render "layouts/sign_in.js.erb" %>
and in layouts/sign_in.js.erb
, I put console.log('test');
Upvotes: 1
Views: 1543
Reputation: 11627
What you can do is the following
In your controller
@template = ActionView::Base.new('app/views/static', {}, ActionController::Base.new).render(file: 'new').to_s
respond_to do |format|
format.js {render 'layouts/sign_in.js.erb'}
end
and then get your @template
variable back in your sign_in.js.erb
, <%= escape_javascript(@template) %>
Upvotes: 1
Reputation: 54902
You can put renders inside the partial and segment your files one more level:
def ajax_call
respond_to do |format|
...
format.js {render 'layouts/grouped_sign_in.js.erb'}
end
end
# in _grouped_sign_in.js.erb
<%= render 'layouts/sign_in.js.erb' %>
<%= render 'layouts/create_account.js.erb' %>
Upvotes: 2