21

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

respond_to do |format|
  format.html { render :nothing => true, :layout => true }
end

然而,由于没有什么意味着什么都不渲染,所以感觉有点不对劲。有没有更合适的方法来渲染布局?请注意,我的布局没有产量。

4

6 回答 6

30

好吧,这在 Rails 4.0 中对我有用:

render :text => "", :layout => true
于 2014-06-24T16:34:18.787 回答
18

(复制 Vasile 的评论以获得更好的可见性。)

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

def index
  render html: '', layout: true
end

或使用自定义布局

def index
  render html: '', layout: 'mylayout'
end

根据 tfwright,这也将起作用:

def index
  render html: nil, layout: true
end

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

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'将呈现''(无布局)

于 2017-08-09T04:22:44.033 回答
5
render :file => "layout_file", :layout => false
于 2013-01-11T16:42:33.047 回答
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

高温高压

于 2013-01-11T16:38:02.543 回答
4

我需要类似的东西——显示一个没有部分的布局模板(部分在客户端处理)。

rails 4.2.0

respond_to do |format|
  format.html { render text: nil, layout: true }
end
于 2015-06-08T21:07:57.857 回答
0

我相信如果您的应用程序只是从服务器获取 JSON,格式应该是json而不是html.

respond_to do |format|
  format.json @your_collection
end

或者将所有动作的格式放在你的控制器中,然后只用对象来响应。

于 2013-01-11T16:14:18.557 回答