2009-09-25 7 views
50

मैंने सोचा था कि निम्न दो बराबर थे:रेल: named_scope, लैम्ब्डा और ब्लॉक

named_scope :admin, lambda { |company_id| {:conditions => ['company_id = ?', company_id]} } 

named_scope :admin, lambda do |company_id| 
    {:conditions => ['company_id = ?', company_id]} 
end 

लेकिन रूबी शिकायत कर रहा है:

ArgumentError: tried to create Proc object without a block 

कोई भी विचार?

+0

मुझे लगता है कि आप या तो लैम्ब्डा या ब्लॉक चाहते हैं, दोनों नहीं। तो दूसरे मामले में बस लैम्ब्डा से छुटकारा पाएं और एक ब्लॉक में गुजरें। यह पहले जैसा ही करना चाहिए। – jkupferman

उत्तर

74

यह एक पार्सर समस्या है। इस

named_scope :admin, (lambda do |company_id| 
    {:conditions => ['company_id = ?', company_id]} 
end) 
+1

मुझे यकीन नहीं है कि यह 'एक पार्सर समस्या' है, लेकिन आपके कोड को इसे ठीक करना चाहिए। – khelll

+0

इसे मेरे उत्तर के रूप में चुनें क्योंकि यह मुझे अपना काम करने देता है ... अंत केक। धन्यवाद मार्टिन। – Gav

+1

खेल: हाँ, 'समस्या' एक गलतफहमी है, मैं स्वीकार करूंगा। यह करने की निचली प्राथमिकता का मामला है ... अंत, जैसा कि माइक वुडहाउस बताता है। –

17

मुझे लगता है कि समस्या {...} और do...end

के बीच पूर्वता में अंतर से संबंधित हो सकता वहाँ कुछ बहुत चर्चा here

मैं सकता है एक चर करने के लिए एक लैम्ब्डा बताए लगता है (जो एक प्रोक होगा) है एक do ... end के साथ किया जा:

my_proc = lambda do 
    puts "did it" 
end 
my_proc.call #=> did it 
+0

धन्यवाद माइक, एक और धागा देखो। :-) – Gav

7

यह पूर्वता से संबंधित कुछ है के रूप में मैं

1.upto 3 do # No parentheses, block delimited with do/end 
    |x| puts x 
end 

1.upto 3 {|x| puts x } # Syntax Error: trying to pass a block to 3! 
6

बताओ तुम्हें गहरे लाल रंग का उपयोग कर रहे हैं 1.9 या बाद में , आप लैम्ब्डा शाब्दिक (तीर वाक्य रचना) का उपयोग कर सकते कर सकते हैं, जो कोशिश लैम्बडा से ब्लॉक को "चोरी" से विधि कॉल को रोकने के लिए पर्याप्त प्राथमिकता है।

named_scope :admin, ->(company_id) do 
    {:conditions => ['company_id = ?', company_id]} 
end 

1 पहली स्थिर रूबी 1.9.1 रिलीज 2009-01-30 था।

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