किसी एक क्रिया के लिए लेआउट बंद करें


81

मेरी स्थिति: ReportController की कार्रवाई को शुद्ध html प्रस्तुत करना चाहिए, लेकिन एक फ़ाइल के रूप में नहीं (ब्राउज़र में इसे देखने के लिए और बाद में इसे बचाने के लिए)। इसलिए रेंडर करने के लिए मैं इस कार्य के लिए किसी भी लेआउट को बंद करने के लिए view template.erb और i neet का उपयोग करता हूं। लेकिन इस नियंत्रक लेआउट के अन्य कार्यों में अछूता रहना चाहिए। इस तरह पूरे नियंत्रक के लिए केवल काम करना बंद कर देता है:

ReportsController < ApplicationController
  layout false

लेकिन यह गलत है :( सभी कार्यों के लिए मैंने कार्रवाई में कुछ इस तरह का उपयोग करने की कोशिश की:

def view      
  @report = Report.new(params[:report])
  unless @report.valid?
    render :action => 'new' and return
  else
    render :layout => false     
  end   
end

मुझे क्या करना चाहिए?


खैर, आपको निश्चित रूप से उस स्पष्ट वापसी की आवश्यकता नहीं है। क्या आप चाहते हैं कि रिपोर्ट मान्य हो तो लेआउट रेंडर करें?
tfwright

जवाबों:


73

इसे इस्तेमाल करे:

ReportsController < ApplicationController
  layout false
  layout 'application', :except => :view

ऐसा लगता है कि यह निर्देश गलत (या अप्रत्याशित) काम करता है। मैंने इन मापदंडों के कुछ संयोजनों का उपयोग करने की कोशिश की (: केवल,: को छोड़कर)। लेकिन सभी कार्यों के लिए सभी लेआउट को हटाने में अजीब काम किया। मुझे लगता है कि यह 'लेआउटनाम' के बजाय शून्य या झूठ के कारण है। और सिस्टम एप्लिकेशन लेआउट की अनदेखी करने वाले अन्य सभी कार्यों के लिए 'कंट्रोलनाम' लेआउट का उपयोग करने की कोशिश करता है। इस मापदंडों के साथ खेलने की कोशिश करें और आप समझ जाएंगे कि यह सब क्या है।
एंटीऑक्सिडेंट

2
आप सही हैं, :onlyठीक से काम नहीं करता है layout nil। मैं इसे लेआउट को शून्य करके और अपवाद के साथ इसे वापस जोड़कर काम करने में सक्षम था। मैंने अपना उत्तर अपडेट कर दिया है।
mckeed

2
डेविड ऑर्टिज़ द्वारा उत्तर "अधिक सही है", क्योंकि यह प्रश्न में लेआउट क्रिया को लेआउट स्विच को ठीक से अलग करता है।
फ्रैंक कोहल

मैं @Paul से सहमत हूँ - falseकाम करता है! उसके लिए धन्यवाद!
मर्स्टिफ

layout false, only: :viewएंटीऑक्सिडेंट उल्लेख जैसे साइड इफेक्ट्स के बिना एक ही लक्ष्य को पूरा करने के लिए अधिक संक्षिप्त तरीके की तरह लगता है।
16

116

यह यह करना चाहिए,

def view
    ...
    render :layout => false
end

प्रलेखन के लिए लिंक


इसके साथ समस्या यह है कि आपको layout: falseकार्रवाई में प्रत्येक प्रारूप के लिए निर्दिष्ट करना होगा ।
जेल्कैकट

1
जवाब है जब जीवन सुंदर है! :
पेड्रो रोलो

11

उत्तर ब्लॉक में, जोड़ें layout: false

उदाहरण के लिए:

respond_to do |format|
  format.html { render :layout => false } # your-action.html.erb
end

2

यदि आप एक गैर-मानक टेम्पलेट प्राप्त करना चाहते हैं, तो बिना किसी लेआउट के आप इसका उपयोग कर सकते हैं:

def non_rest
  render template: 'layouts/something_new', layout: false
end

विपरीत के बारे में कैसे - क्या मैं डिफ़ॉल्ट लेआउट को बिना किसी टेम्पलेट के प्रस्तुत कर सकता हूं?
कासिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.