Rails只渲染布局?

agm*_*eod 19 ruby-on-rails

只是尝试一个简单的rails应用程序,主要是使用JSON,重型客户端应用程序的API后端.所以我想做的只是渲染布局,并让javascript代码处理url,并使ajax请求获取json数据.以下似乎有效:

respond_to do |format|
  format.html { render :nothing => true, :layout => true }
end
Run Code Online (Sandbox Code Playgroud)

但是,由于没有任何东西可以做任何事情,感觉有点不对劲.有没有更恰当的方式来渲染布局?请注意,我的布局没有收益.

Dev*_*oop 29

嗯,这在Rails 4.0中对我有用:

render :text => "", :layout => true
Run Code Online (Sandbox Code Playgroud)

  • 这将在Rails 5中抛出一个弃用警告.您可以使用`render html:'',layout:true`来获得相同的结果. (7认同)

Max*_*nus 12

(复制Vasile的评论以提高可见度.)

对于rails 5.1,为了在不需要视图模板的情况下呈现布局,您需要使用

def index
  render html: '', layout: true
end
Run Code Online (Sandbox Code Playgroud)

或者使用自定义布局

def index
  render html: '', layout: 'mylayout'
end
Run Code Online (Sandbox Code Playgroud)

根据tfwright,这也将起作用:

def index
  render html: nil, layout: true
end
Run Code Online (Sandbox Code Playgroud)

但是,以下内容不起作用:

render text: '', layout: 'mylayout'会给你一个错误,因为视图模板index.html.haml不存在.

render nothing: true, layout: 'mylayout'会给你一个错误因为nothing:true已弃用,并且该index模板不存在(但是,这适用于rails 4.2)

render body: '', layout: 'mylayout' 将渲染''(没有布局)

render plain: '', layout: 'mylayout' 将渲染''(没有布局)


Val*_*von 5

render :file => "layout_file", :layout => false
Run Code Online (Sandbox Code Playgroud)


sam*_*207 4

试试这个,这会将响应呈现给一个名为的文件sample.html,该文件可能是静态 html 文件。

并且您还可以将此文件放在一个公共位置,以便您可以将其加载到所有操作中

此页面中有您的静态内容,如果您需要动态页面,您.erb也可以有一个页面

在你的方法中

def index
    @posts = Post.all

    respond_to do |format|
      format.html {render :file => "posts/sample"}
      format.json { render json: @posts }
    end
end

/post/sample.html
Run Code Online (Sandbox Code Playgroud)

华泰