Файл Rails js.erb не выполняется

7

Я просто пытаюсь получить файл index.js.erb для выполнения команды alert ( "hi" ), однако она не работает. Я новичок в рельсах, и мне было интересно, могли бы вы, ребята, помочь мне! Похоже, что метод index.js server_controller.rb корректно не выполняет format.js. Любые предложения/идеи?

servers_controller.rb

def index
    @servers = Server.all

    update_all_servers #calls the method update_all_servers in application_controller.rb

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @servers }
      format.js #index.js.erb
    end
end

index.js.erb

alert("hi");
$("#comments").fadeOut();

index.html

<%- model_class = Server.new.class -%>
<div class="page-header">
  <h1><%=t '.title', :default => model_class.model_name.human.pluralize %></h1>
</div>
<table class="table table-striped">
  <thead>
    <tr>
 <!--     <th><%= model_class.human_attribute_name(:id) %></th> -->
      <th><%= model_class.human_attribute_name(:hostname) %></th>
      <th><%= model_class.human_attribute_name(:port) %></th>
  <!--    <th><%= model_class.human_attribute_name(:username) %></th>
      <th><%= model_class.human_attribute_name(:password) %></th>
      <th><%= model_class.human_attribute_name(:ssh_username) %></th>
      <th><%= model_class.human_attribute_name(:ssh_password) %></th> 
      <th><%= model_class.human_attribute_name(:source_branch) %></th> -->
      <th><%= model_class.human_attribute_name(:source_revision) %></th>
      <th><%= model_class.human_attribute_name(:release) %></th>
      <th><%= model_class.human_attribute_name(:rhel_version) %></th>
      <th><%= model_class.human_attribute_name(:gpu_type) %></th>
      <th><%= model_class.human_attribute_name(:total_users) %></th>
      <th><%= model_class.human_attribute_name(:current_users) %></th>
      <th><%= model_class.human_attribute_name(:created_at) %></th>
      <th><%=t '.actions', :default => t("helpers.actions") %></th>
    </tr>
  </thead>
  <tbody>
    <% @servers.each do |server| %>
      <tr>
  <!--      <td><%= link_to server.id, server_path(server) %></td> -->
        <td><%= server.hostname %></td>
        <td><%= server.port %></td>
   <!--     <td><%= server.username %></td>
        <td><%= server.password %></td>
        <td><%= server.ssh_username %></td>
        <td><%= server.ssh_password %></td>
        <td><%= server.source_branch %></td> -->
        <td><%= server.source_revision %></td>
        <td><%= server.release %></td>
        <td id="comments"><%= server.rhel_version %></td>
        <td><%= server.gpu_type %></td>
        <td><%= server.total_users %></td>
        <td><%= server.current_users %></td>
        <td><%=l server.created_at %></td>
        <td>
          <%= link_to t('.edit', :default => t("helpers.links.edit")),
                      edit_server_path(server), :class => 'btn btn-mini' %>
          <%= link_to t('.destroy', :default => t("helpers.links.destroy")),
                      server_path(server),
                      :method => :delete,
                      :confirm => t('.confirm', :default => t("helpers.links.confirm", :default => 'Are you sure?')),
                      :class => 'btn btn-mini btn-danger' %>
        </td>
      </tr>
    <% end %>
  </tbody>
</table>

<%= link_to t('.new', :default => t("helpers.links.new")),
            new_server_path,
            :class => 'btn btn-primary' %>

application.js

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require_tree .
  • 0
    Работает ли JavaScript, если вы удалите вторую строку? Попробуйте просто запустить предупреждение самостоятельно.
  • 0
    удаление второй строки все равно не работает :(
Показать ещё 5 комментариев

2 ответа

2

Направьте свой браузер на /servers.js, и он покажет js, но не будет работать, как это не в теге script.

Раздел respond_to выбирает один и только один тип материала для ответа, поэтому, когда вы смотрите на страницу html, если вы хотите включить какой-либо javascript, он должен быть на странице html в теге script как-то. Формат index.js.erb предназначен для запросов, которые создаются исключительно для вывода javascript, таких как запросы ajax.

  • 0
    Спасибо, я попробую!
  • 0
    Так есть ли файл method.js для метода def, который также включает в себя код ruby <%%> в rails 4? перед вами, где требуется добавить .erb в расширение
1

Я знаю, что этот вопрос старый, хотя вот решение, потому что я наткнулся на эту проблему дважды в этот день, даже не вспомнив;)

Согласно сообщению this, вы должны проверить свой request type. Это должно быть JS. Если вы запрашиваете действие контроллера через AJAX, просто оставьте dataType-attribute. Это установит тип запроса как */*, но он все равно будет работать.

Пример:

$.ajax({
    url: '/users/auth/facebook/callback',
    type: 'GET'
});

ИЗМЕНИТЬ

Запрос на контроллер должен выглядеть следующим образом:

Processing by Users::OmniauthCallbacksController#facebook as JS

С моим решением это будет выглядеть так:

Processing by Users::OmniauthCallbacksController#facebook as */*

Установка типа dataType в "JS" не сработала для меня, но она все равно будет работать так, как если бы это была JS.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню