在Ruby on Rails中通过ajax渲染局部视图

时间:2014-03-01 18:12:10

标签: ruby-on-rails ajax render single-page-application rails-routing

目前我正在努力让我的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动作中的东西。我试图调用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的内容,这是我的部分进入id为“内容”的div,但是当点击按钮和_enjoy.html时。苗条被渲染它在整个index.html.slim页面上加载...所以我被困在那,我怎么能让它加载到某个div?

非常感谢任何对此问题有答案的人{:

2 个答案:

答案 0 :(得分:3)

您必须在“欢迎”视图目录中添加create.js.erb文件,并且必须按照ajax渲染部分文件:

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

并且在控制器的创建操作中,您必须响应javascript:

def create
 ...
 respond_to do |format|
   format.js
 end
end

答案 1 :(得分: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'

创建welcome / create.js.erb并向其添加以下行:

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