21

単純なRailsアプリを試してみてください。ほとんどの場合、JSONを使用したAPIバックエンド、重いクライアント側アプリを使用します。だから私がやりたいのは、レイアウトをレンダリングし、javascriptコードにURLを処理させ、ajaxリクエストを作成してjsonデータを取得することだけです。以下はうまくいくようです:

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

しかし、何もレンダリングすることを意図していないので、それはちょっと間違っているように感じます。レイアウトをレンダリングするためのより適切な方法はありますか?私のレイアウトには歩留まりがないことに注意してください。

4

6 に答える 6

30

さて、これはRails4.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

HTH

于 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 に答える