2

В настоящее время я пытаюсь сделать мои рельсы приложение одного постранично, но я имею некоторые проблемы с оказанием частичных .. Теперь вот мой код контроллера:Рендер частичного представления через AJAX в Ruby On Rails

class WelcomeController < ApplicationController 

    def create 
     @welcome = WelcomeController.new 
     render :partial => 'enjoy' 
    end 

    def index 
     if params[:id] == 'enjoy' 
      @partial_view = 'enjoy' 
     elsif params[:id] == 'about' 
      @partial_view = 'about' 
     else 
      @partial_view = 'main' 
     end 
    end 

end 

Таким образом, этот контроллер связан с моим представлением, и для страниц, которые меняют, я использовал код в действии индекса, но теперь я пытаюсь использовать вещь в действии create. Код моего index.html.slim, где я пытаюсь вызвать создать действие является:

 div id="content" 

     = form_tag(:url => {:action => 'create'}, 
       :update => "content", :position => :bottom, 
       :html => {:id => 'subject_form'}, 
       :remote => true) 

      = submit_tag 'Add' 

Так на кнопку нажмите кнопку «Добавить», я ожидал содержание от _enjoy.slim.html, который мой частичный, чтобы перейти в div с id-содержимым, но когда нажата кнопка, и _enjoy.html.slim отображается, он загружается поверх всей страницы index.html.slim ... Поэтому я застрял в этом, как я могу загрузить его в определенный div?

Спасибо за тонну для всех, кто имеет ответ на этот {:

+0

Какую версию рельсов вы работаете? – Hesham

ответ

3

контроллер:

class WelcomeController < ApplicationController 

    def create 
    @welcome = WelcomeController.new 
    # Remove the render 
    end 

    def index 
    # No change 
    end  
end 

Вид:

div id="content" 

= form_tag({:action => 'create'}, :id => 'subject_form', :remote => true) do 
    = submit_tag 'Add' 

Создать приветствие/create.js.erb и добавьте следующую строку в него:

$('#content').html("<%= j render(:partial => 'welcome/enjoy') %>")

+0

Большое спасибо! <3 Мне просто интересно, возможно ли запустить его с файлом create.js.slim? Потому что я его протестировал, и этого не произошло, [ – victor175

+0

Возможно? Попробуйте переименовать файл в файл create.js.slim. Вам нужно будет изменить содержимое на: '$ ('# content'). Html (" # {j render (: partial => 'welcome/enjoy')} ")' – Hesham

+0

Умм .. Почему # {j renderer ... и не = {j renderer ..? – victor175

3

Вы должны добавить create.js.erb файл в «приветствия» каталогов, и там вы должны вынести частичное за AJAX:

$("#content").html("<%= j render(:partial => 'welcome/enjoy') %>"); 

и в создании действия контроллера, вы должны ответить на JavaScript:

def create 
... 
respond_to do |format| 
    format.js 
end 
end 
Смежные вопросы