2013-12-17 5 views
18

मैं, "रेल 4 के साथ चंचल वेब विकास" पढ़ रहा हूँ पग पर। 338 यह कहता है:रेल 4 में झूठी वापसी करने से पहले क्या करता है?

[...] कॉलबैक एक नियंत्रक द्वारा निष्पादित गतिविधि, निष्क्रिय हो सकता है। वे अनुरोध हैंडलिंग में एक और अधिक सक्रिय हिस्सा भी ले सकते हैं। यदि पहले एक क्रिया कॉलबैक झूठी वापसी करता है, तो कॉलबैक श्रृंखला की प्रक्रिया समाप्त हो जाती है, और कार्रवाई नहीं चलती है। [...]

अब मेरी संदेह निम्नलिखित है: यहाँ how to execute an action if the before_action returns false यह बताया गया था before_action के लक्ष्य को अगर यह गलत रिटर्न यह मतलब नहीं है कि पहले कार्रवाई निष्पादित किया जाता है कुछ तैयार करने के लिए, यह है कि कार्रवाई नहीं चलती है, लेकिन पुस्तक के अनुसार यह सही है ... तो मुझे थोड़ी उलझन में आ रहा है।

अगर मैं कोशिश कर रहा हूँ निम्नलिखित

class ProductsController < ApplicationController 
before_action :test 

    def index 
    @products = Product.all 
    end 


    private 

    def test 
     return false 
    end 
end 

लेकिन कार्रवाई निष्पादित किया जाता है, जब मैं /products फोन मैं किसी भी त्रुटि नहीं मिलता है और पेज ठीक

+0

क्योंकि स्वीकार किए जाते हैं जवाब किसी भी तरह मुझे और बहुत लंबा, tl भ्रमित; डॉ; वापसी मूल्य अप्रासंगिक – akostadinov

उत्तर

36

before_action (पूर्व before_filter नामित दिखाता है) एक कॉलबैक है जो किसी क्रिया को निष्पादित करने से पहले किया जाता है। आप controller before/after_action के बारे में अधिक पढ़ सकते हैं।

यह सामान्य रूप से कार्रवाई को तैयार या निष्पादन को बदलने के लिए प्रयोग किया जाता है।

परंपरा है कि अगर श्रृंखला में से किसी भी विधि प्रस्तुत करना या पुनः प्रेषण, तो निष्पादन रोक दिया जाता है और कार्रवाई गाया नहीं है।

before_action :check_permission 

def hello 
end 

protected 

def check_permission 
    unless current_user.admin? 
    # head is equivalent to a rendering 
    head(403) 
    end 
end 

इस उदाहरण में, यदि current_user.admin? रिटर्न झूठी, hello कार्रवाई कभी नहीं किया जाता है।

before_action :find_post 

def show 
    # ... 
end 

def edit 
    # ... 
end 

def update 
    # ... 
end 

protected 

def find_post 
    @post = Post.find(params[:id]) 
end 

इस मामले find_post में वापसी झूठी कभी नहीं होगा:

एक निम्नलिखित, बजाय, कार्रवाई सेटअप का एक उदाहरण है। वास्तव में, इस पहले उद्देश्य का उद्देश्य कार्यों के शरीर से साझा आदेश निकालना है।

false लौटने के बारे में, के रूप में तक मुझे पता है इस ActiveRecord कॉलबैक लिए सच है। लेकिन पहले से ही प्रतिक्रिया के लिए, झूठी वापसी का कोई प्रभाव नहीं पड़ता है। वास्तव में, आधिकारिक दस्तावेज में वापसी मूल्य का उल्लेख महत्वपूर्ण नहीं है।

+1

है यदि 'हैलो' कभी नहीं किया जाता है जो किया जाता है? – zer0uno

+0

मैंने उदाहरण को अधिक स्पष्ट होने के लिए अपडेट किया है। इस मामले में, अनुरोध वापसी 403 –

+0

मैं अपने प्रश्न – zer0uno

संबंधित मुद्दे