user3110240
user3110240

Reputation: 15

How to call a .js.erb file instead of a .rjs one

I'm working on a migration from Prototype to jQuery and we also have to remove .rjs file when we can. There is here one issue :

I have got the update_overall_comment.rjs file in the app/views/results folder:

page.replace 'overall_comment', :partial => 'results/marker/overall_comment', :locals =>  {:result => @result}
page.visual_effect(:highlight, 'overall_comment_text_area', :startcolor => '#BDFCC9')

The _overall_comment.html.erb file in the app/views/results/markers folder:

<div id="overall_comment">
          <div id="overall_comment_edit">
            <%= form_for @result,
              :remote => true,
              :url => { :action => 'update_overall_comment', :id => @result.id } do |f| %>
              <%= f.text_area :overall_comment,
                :cols => 50,
                :rows => 5,
                :id => 'overall_comment_text_area',
                :onkeydown => "$('overall_comment_submit').enable();" %>
           <div>
             <%= f.submit t(:save_changes),
               :disable_with => I18n.t('working'),
               :disabled => true,
               :id => "overall_comment_submit"%>
           </div>
          <% end %>
    </div>
</div>

And the results.controller.rb file (I just show the relevant function ) in the app/controllers folder:

def update_overall_comment
  @result = Result.find(params[:id])
  @result.overall_comment = params[:result][:overall_comment]
  @result.save
end

The fist thing I would like to understand is how to transform the .rjs file to a .js.erb on. I removed it and created update_overall_comment.js.erb (in the same folder) which only contains a console.log('...'), and I never saw the console.log called.

Do you have any ideas ?

Thank you in advance.

Upvotes: 1

Views: 284

Answers (2)

rmagnum2002
rmagnum2002

Reputation: 11421

rename update_overall_comment.rjs to update_overall_comment.js.erb

then in this file:

$('#overall_comment').html("<%= j(render 'results/marker/overall_comment') %>");
$('#overall_comment_text_area').effect("highlight", { color: "#BDFCC9" }, 3000);

p.s. not sure about the highlight, also for verifying that the js.erb file is called/rendered, I use alert('something here'); instead of console('...');, but this shouldn't be much of a difference in order to test an ajax call.

Upvotes: 1

user3110240
user3110240

Reputation: 15

Thank you very much. I have made some mistakes.

For instance I thought a line with "//" was a comment and in fact it does a ajax error. Also I used partial for the first line and it did't work.

And I thought this js.erb file would inform me about errors but no. It just stop when it doesn't work without any information. So I had to find by myself that my jquery version didn't have the "effect" method.

But now it works and your translation of visual_effect work (I just put 1000ms instead of 3000).

Upvotes: 0

Related Questions