2013-01-11 184 views
14

只是尝试一个简单的Rails应用程序,主要用于与JSON,沉重的客户端应用程序的API后端。所以我想要做的只是渲染布局,并让JavaScript代码处理url,并使ajax请求获取json数据。以下似乎工作:仅限Rails渲染布局?

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

但是,因为没有什么意思是不渲染什么,所以感觉有点不对。有没有更正确的方法来呈现布局?请注意,我的布局没有收益率。

回答

3

试试这个,这会回应一个名为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 

HTH

+0

我对此的担忧是返回不需要的数据。我还考虑过':text =>“”'作为一个选项,但同样需要':layout => true',因为默认情况下它只呈现文本。 – agmcleod

+0

你不能有一个空白的静态html页面(或者其他东西),或者你可以解释当用户点击这个动作时需要看到什么! (或者在静态文件中包含所有css和js,并且根本不使用布局) – sameera207

+0

这也可以工作:)。我的一位同事也建议在sinatra做前端方面的事情,并且将rails作为纯API。 – agmcleod

0

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

respond_to do |format| 
    format.json @your_collection 
end 

或者将所有操作的格式放在您的控制器中,然后仅使用对象进行响应。

+0

但问题是响应定期网址。我不想重复haml和JST视图。假设我有一个帖子控制器的简单博客。因此,要直接访问帖子,您需要转到'/ posts/1'。所以需要做的是渲染布局。如果我只是用JSON响应,并且我没有为html响应说出什么,那么'/ posts/1'会引发模板错误。 – agmcleod

+0

嗯,我想你会用JavaScript处理DOM代码。就像从服务器中取代基于json的html一样。 – MurifoX

+0

你可以。但是,当试图通过链接点击替换内容时,它变得更加棘手,而不是。当应用程序变大时,它变得复杂。我试图绕过这个思维模式,并且用这种风格来练习一些练习,所以我可以将这个应用程序变成一些东西。 – agmcleod

5
render :file => "layout_file", :layout => false 
+0

这也是一个有趣的选项。我不知道是否有一个不利的方面,而不认为它是一个布局。 – agmcleod

25

那么,这个工作对我来说在Rails的4.0:

render :text => "", :layout => true 
+0

这看起来只是一种简单的渲染方式,没有任何输入 – Jay

+3

这会在Rails 5中抛出一个弃用警告。您可以使用'render html:'',layout:true'来实现相同的结果。 – Sebastian

4

我需要的东西similar--显示没有局部布局模板(如谐音被处理客户方)。

rails 4.2.0

respond_to do |format| 
    format.html { render text: nil, layout: true } 
end 
+0

虽然这个答案可能是正确和有用的,但是如果你包含一些解释并解释它是如何帮助解决问题的,那么这是首选。如果存在导致其停止工作并且用户需要了解其曾经工作的变化(可能不相关),这在未来变得特别有用。 –

0

(复制瓦西里的意见,更好的能见度。)

钢轨5.1,为了使布局而无需视图模板,你需要使用

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

或用自定义布局

def index 
    render html: '', layout: 'mylayout' 
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'将使 ''(没有布局)