Не работает AJAX с Rails приложением?

И снова я продолжаю блок вопросов о Rails приложениях. Есть todo приложения, в нем выводиться список, всех Project'ов и заданий к ним. Снизу есть форма для добавления нового Project'а. В код контроллера я добавил format.js
def create
    @project = Project.new(project_params)

    respond_to do |format|
      if @project.save
        format.html { redirect_to todo_path, notice: 'Project was successfully created.' }
 =>    format.js
        format.json { render :show, status: :created, location: @project }
      else
        format.html { render :new }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

В саму форму добавлен remote: true
<%= form_for(@project, remote: true) do |f| %>
        <%= f.text_field :name, :placeholder => ' Enter new project here..' %>
        <but><%= f.submit 'Add Project', remote: true %></but>
    <% end %>

Создан файл сreate.js.erb
$('#projects').html("<%= escape_javascript render('projects') %>");

Только вот есть один нюанс, создание нового проекта, то есть сама форма, у меня находиться в Todo(app/views/todo/index.html.erb) а контроллер для создания нового Project'a в (app/controllers/project_controller.rb), а выше созданный файл create.js.erb в (app/views/projects/create.js.erb).
И вот собственно то что происходит на страничке: после нажатия на кнопку Add Project, ничего не происходит, но если обновить то новый Project добавляется. Что я сделал не так??

вот что после нажатия на кнопку пишет лог:
ActionView::Template::Error (Missing partial projects/_projects, application/_projects with {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in:
  * "/home/xo8bit/ruby/todo-app/app/views"
):
    1: $('#projects').html("<%= escape_javascript (render 'projects') %>");
  app/views/projects/create.js.erb:1:in `_app_views_projects_create_js_erb__2233098556876763135_37757080'
  app/controllers/projects_controller.rb:29:in `create'


  Rendered /home/xo8bit/.rvm/gems/ruby-2.0.0-p481/gems/actionpack-4.1.4/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb (1.0ms)
  Rendered /home/xo8bit/.rvm/gems/ruby-2.0.0-p481/gems/actionpack-4.1.4/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb (1.4ms)
  Rendered /home/xo8bit/.rvm/gems/ruby-2.0.0-p481/gems/actionpack-4.1.4/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb (17.7ms)
  • Вопрос задан
  • 3475 просмотров
Решения вопроса 2
@Shetani
$('#projects').html("<%= escape_javascript (render 'projects') %>");

скобочки поправьте, может и заработает
Ответ написан
Freika
@Freika
Senior Ruby on Rails developer
Дело в Turbolinks. При переходе со страницы на страницу со включенным turbolinks, аяксом загружается только body-часть новой страницы, а скрипты остаются прежними. То есть create.js.erb не подключается. А когда вы вручную обновляете страницу, скрипт подгружается и все работает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы