2016-01-13 4 views
1

У меня есть очень простой вызов ajax для действия контроллера, который должен отображать форму в указанный div. Кроме того, что ничего не отображается в div, а все в контроллере, сервере и консоли предполагает, что он должен работать. Я проверил и дважды проверил, что теги названы одинаковыми, я переименовал их, чтобы увидеть, есть ли конфликт, у меня даже есть что-то на той же странице, что и то, что я хочу сделать, но это просто не работает.Rails 4, ответ JS ERB отображает application.html вместо указанного частичного

При дальнейшей проверке в Chrome появляется сообщение «js.erb» не оценивается должным образом. Когда файл отображается, он должен выводить содержимое моего js-файла erb (который в других случаях работает), за исключением того, что он выводит весь макет с частичной оболочкой.

Я также поставил здесь предупреждение для хорошей меры, которая не срабатывает (она срабатывает в проекте, протестированном с другими контроллерами js).

......... 
<div class='container'> 
    <div class='row'> 
    <section class='col-lg-12'> 
     <div class='panel panel-default'> 
     <div class='panel-body'> 
      alert('test'); 
      $("#membershipForm").html("<form novalidate=\"novalidate\" 

Здесь действие контроллера

def new 
    @membership = Membership.new(membershipable_type: params[:membershipable_type], 
           membershipable_id: params[:membershipable_id]) 
    respond_to do |format| 
     format.js { render 'new' } 
    end 
    end 

и здесь new.js.erb

alert('test'); 
$("#membershipForm").html("<%= j render('memberships/partials/form') %>"); 

Это очень странно, я действительно не понимаю, что происходит.

+0

Вы включили пульт дистанционного управления: правда? – mrvncaragay

+0

Можете ли вы добавить свой выход в журнал? – Swards

ответ

1

Вам необходимо установить layout: false в методе render. Нравится render(template: 'foo/bar', layout: false)

Также я думаю, что реализация через .js.erb не является хорошим способом для других разработчиков. Я рекомендую вам реализовать, как описано ниже.

Удалите new.js.erb и добавьте в new.erb:

<%= javascript_tag do %> 
    alert('test'); 
    $("#membershipForm").html(<%= render_to_string(template: 'members/partials/form', layout: false) %>); 
<% end %> 
0

Проблема, несомненно, связано с вашей format.js { render "new" } - вы будете лучше со следующим:

#app/controllers/memberships_controller.rb 
class MembershipsController < ApplicationController 
    respond_to :js, :html 

    def new 
     @membership = Membership.new membershipable_type: params[:membershipable_type], membershipable_id: params[:membershipable_id] 
    end 

    def create 
     @membership = Membership.new membership_params 
     @membership.save 
    end 

    private 

    def membership_params 
     params.require(:membership).permit(:membershipable_type, :membershipable_id) 
    end 
end 

выше будет вызывать .js.erb Файлы для соответствующих действий:

#app/views/memberships/new.js.erb 
$("#membershipForm").html("<%= j render 'memberships/partials/form' %>"); 

Это должно сработать.

+0

Богатый, у меня есть аналогичная проблема, но поскольку есть больше действий, я не знаю, как это сделать. Не могли бы вы взглянуть на него? http://stackoverflow.com/questions/34817690/rails-ajax-js-erb-same-route-more-actions –

Смежные вопросы