user1611830
user1611830

Reputation: 4865

rendering multiple files - rails

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

Answers (2)

epsilones
epsilones

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

MrYoshiji
MrYoshiji

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

Related Questions