विषय 37signals पर लेख का एक मुफ्त अनुवाद है।कल मैंने रेल एपीआई के लिए प्रलेखन में देरी की और कंसोल के कई उपयोगी रेल कार्यों को
देखा, जो मैंने
पहले नहीं देखा था । इससे पहले, irb और Rails के बारे में
बहुत सारे प्रकाशन थे , लेकिन मुझे उम्मीद है कि आप इससे कुछ नया सीखेंगे। उपरोक्त उदाहरण रेल्स वर्जन 3.2.3 पर बेसकैंप नेक्स्ट का उपयोग कर बनाए गए हैं।
अपने आवेदन में विसर्जित कर दियाकंसोल में ऐप विधि का उपयोग करना सत्र का एक उदाहरण बनाता है, जिसके परिणामस्वरूप आप इसमें सामान्य
एकीकरण परीक्षण की क्षमताओं का उपयोग कर सकते हैं।
>> app.class
=> ActionDispatch::Integration::Session
बनने वाले मार्ग हमेशा तनावपूर्ण रहे हैं। आपको वहां कनेक्ट करने के लिए किस मॉड्यूल की आवश्यकता थी? क्या आपको default_url_options निर्दिष्ट करना याद है? Googling बंद करें और बस ऐप का उपयोग करें:
>> app.project_path(Project.first)
=> "/projects/130349783-with-attachments"
यह एप्लिकेशन के अंदर क्वेरी भी बना सकता है:
>> app.get "/735644780/projects/605816632-bcx.atom"
=> 200
>> app.response.body
=> "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<feed xml:lang=\"en-US\" ...
ActionDispatch पर
एक नज़र डालें :: एकीकरण :: सत्र और
ActionDispatch :: एकीकरण :: RequestHelpers यह पता लगाने के लिए कि यह वस्तु और किस लिए उपयोगी हो सकती है।
सहायक की कोशिश करोरेल सहायकों को सांत्वना सत्र जोड़ना भी दर्दनाक है, लेकिन सहायक इसे ठीक कर सकते हैं! आप HTML टैग या किसी अन्य रेल हेल्पर के साथ खेलने के लिए भी इसका उपयोग कर सकते हैं, जिसके बारे में एक्शन व्यू को पता है।
>> helper.truncate("Testing", length: 4)
=> "T..."
>> helper.link_to "Home", app.root_path
=> "Home"
सहायक के साथ एक और विचार सहायक विधि के अंदर उदाहरण चर का उपयोग करना है। हां, मुझे पता है कि यह सामान्य रूप से सहायकों के लिए एक बुरा विचार है, लेकिन मेरे एक भी रेल एप्लिकेशन इसके बिना नहीं कर सकता। यहाँ विधि का एक छोटा सा उदाहरण है:
def title_tag(title = nil)
if @project.present? && title.nil?
content_tag :title, @project.name
elsif @project.present?
content_tag :title, "#{@project.name}: #{title}"
else
content_tag :title, title
end
end
आप OOP के मूल सिद्धांत का उल्लंघन करने के लिए पुराने मित्र ऑब्जेक्ट # inst_variable_set की मदद का सहारा ले सकते हैं, मुझे कंसोल में हेल्पर आज़माएँ:
>> helper.title_tag "Testing!"
=> "Testing!"
>> helper.instance_variable_set :@project, Project.first
=> #<Project id: 130349783, ...
>> helper.title_tag
=> "With attachments!"
>> helper.title_tag "Posts"
=> "With attachments!: Posts"
परम का उपयोग करके एक सहायक के साथ काम करना बहुत आसान नहीं है। हालाँकि, एक छोटी सी हैक के साथ हम हमें देखने के लिए ActionView प्राप्त कर सकते हैं। यह सांत्वना है, आखिर! मान लीजिए कि हमारे पास एक सहायक तरीका है:
def javascript_debugging_options
if params[:javascript_debugging] == "enabled"
{ debug: true, digest: false }
else
{}
end
end
आमतौर पर, एक ActionView को सभी ActionDispatch की आवश्यकता होती है :: नियंत्रक से अनुरोध यह निर्धारित करने के लिए कि उपयोगकर्ता कौन से पैरामीटर से आया है। आप उसे एक छोटे से
OpenStruct का उपयोग करके मूर्ख बना सकते हैं:
>> helper.controller = OpenStruct.new(params: {})
=> #<OpenStruct params={}>
>> helper.javascript_debugging_options
=> {}
>> helper.controller = OpenStruct.new(params: {javascript_debugging: "enabled"})
=> #<OpenStruct params={:javascript_debugging=>"enabled"}>
>> helper.javascript_debugging_options
=> {:debug=>true, :digest=>false}
यह तरीका कहां से आया?वांछित विधि के सटीक स्थान को ट्रैक करना हमेशा आसान नहीं होता है। सौभाग्य से, रूबी विधि # source_location के साथ सही दिशा में इंगित कर सकती है:
>> Project.instance_method(:trash).source_location
=> ["/Users/qrush/37s/apps/bcx/app/models/project.rb", 90]
ओह! फ़ाइल में इस विधि की लाइन संख्या के साथ, आपको विधि के लिए पूर्ण पथ वाला एक सरणी मिलेगा।
मैंने इसका इस्तेमाल तब भी किया था जब मुझे रत्नों में गहरे दफन कोड की तलाश थी। चलो एप्लिकेशन पर जाँच करें:
>> app.method(:get).source_location
=> ["/Users/qrush/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/bundler/gems/rails-7d95b814583b/actionpack/lib/action_dispatch/testing/integration.rb", 32]
इस पद्धति ने मुझे स्रोत में बहुत अधिक संख्या में गोता लगाने से बचाया। इसका उपयोग करें!