जवाबों:
सहायकों को कॉल करने के लिए, helper
ऑब्जेक्ट का उपयोग करें :
$ ./script/console
>> helper.number_to_currency('123.45')
=> "R$ 123,45"
यदि आप एक सहायक का उपयोग करना चाहते हैं जो डिफ़ॉल्ट रूप से शामिल नहीं है (कहते हैं, क्योंकि आपने हटा दिया helper :all
है ApplicationController
), बस सहायक को शामिल करें।
>> include BogusHelper
>> helper.bogus
=> "bogus output"
नियंत्रकों से निपटने के लिए , मैं निक के उत्तर को उद्धृत करता हूं :
> app.get '/posts/1' > response = app.response # you now have a rails response object much like the integration tests > response.body # get you the HTML > response.cookies # hash of the cookies # etc, etc
url_for
कंसोल से कॉल करने की आवश्यकता थी । यह करने के लिए मैंने कियाapp.url_for(...)
NoMethodError: undefined method `protect_against_forgery?' for nil:NilClass
किसी फ़ंक्शन protect_against_forgery?
को कंसोल के भीतर बुलाया गया है, जिसे परिभाषित करने के लिएfalse
ActionDispatch::Integration::Session.include(Warden::Test::Helpers); Warden.test_mode! ; app.login_as(User.find(1), scope: :user)
।
स्क्रिप्ट / कंसोल से कंट्रोलर एक्शन को कॉल करने और प्रतिक्रिया ऑब्जेक्ट को देखने / हेरफेर करने का एक आसान तरीका है:
> app.get '/posts/1'
> response = app.response
# You now have a Ruby on Rails response object much like the integration tests
> response.body # Get you the HTML
> response.cookies # Hash of the cookies
# etc., etc.
एप्लिकेशन ऑब्जेक्ट एक्शनकंट्रोलर :: एकीकरण :: सत्र का एक उदाहरण है
यह मेरे लिए रूबी 2.1 और 2.3 पर रूबी का उपयोग करने के लिए काम करता है, और मैंने पहले संस्करणों की कोशिश नहीं की।
यदि आपको कंसोल से परीक्षण करने की आवश्यकता है (रूबी 3.1 और 4.1 पर रूबी पर परीक्षण किया गया):
कॉल कंट्रोलर एक्ट्स:
app.get '/'
app.response
app.response.headers # => { "Content-Type"=>"text/html", ... }
app.response.body # => "<!DOCTYPE html>\n<html>\n\n<head>\n..."
ApplicationController तरीकों:
foo = ActionController::Base::ApplicationController.new
foo.public_methods(true||false).sort
foo.some_method
मार्ग सहायकों:
app.myresource_path # => "/myresource"
app.myresource_url # => "http://www.example.com/myresource"
सहायक देखें:
foo = ActionView::Base.new
foo.javascript_include_tag 'myscript' #=> "<script src=\"/javascripts/myscript.js\"></script>"
helper.link_to "foo", "bar" #=> "<a href=\"bar\">foo</a>"
ActionController::Base.helpers.image_tag('logo.png') #=> "<img alt=\"Logo\" src=\"/images/logo.png\" />"
प्रस्तुत करना:
views = Rails::Application::Configuration.new(Rails.root).paths["app/views"]
views_helper = ActionView::Base.new views
views_helper.render 'myview/mytemplate'
views_helper.render file: 'myview/_mypartial', locals: {my_var: "display:block;"}
views_helper.assets_prefix #=> '/assets'
ActiveSupport विधियाँ:
require 'active_support/all'
1.week.ago
=> 2013-08-31 10:07:26 -0300
a = {'a'=>123}
a.symbolize_keys
=> {:a=>123}
Lib मॉड्यूल:
> require 'my_utils'
=> true
> include MyUtils
=> Object
> MyUtils.say "hi"
evaluate: hi
=> true
यहाँ कंसोल के माध्यम से ऐसा करने का एक तरीका है:
>> foo = ActionView::Base.new
=> #<ActionView::Base:0x2aaab0ac2af8 @assigns_added=nil, @assigns={}, @helpers=#<ActionView::Base::ProxyModule:0x2aaab0ac2a58>, @controller=nil, @view_paths=[]>
>> foo.extend YourHelperModule
=> #<ActionView::Base:0x2aaab0ac2af8 @assigns_added=nil, @assigns={}, @helpers=#<ActionView::Base::ProxyModule:0x2aaab0ac2a58>, @controller=nil, @view_paths=[]>
>> foo.your_helper_method(args)
=> "<html>created by your helper</html>"
एक नया उदाहरण बनाने से ActionView::Base
आपको सामान्य दृश्य विधियों तक पहुंचने में मदद मिलती है जो आपके सहायक संभावना का उपयोग करते हैं। फिर YourHelperModule
अपने तरीकों को अपनी वस्तु में मिला देता है जिससे आपको उनके रिटर्न मान देखने को मिलते हैं।
यदि विधि POST
विधि है तो:
app.post 'controller/action?parameter1=value1¶meter2=value2'
(यहां पैरामीटर आपकी प्रयोज्यता के अनुसार होंगे।)
और यदि यह GET
विधि है तो:
app.get 'controller/action'
app.methods.grep(/_path/)
:)
controler/action
, आपके मार्गों पर निर्भर करता है, उदाहरण के लिए /users/all
और Api::UsersController#index
:
rake routes
। :)
ऐसा करने का एक और तरीका रूबी डीबगर पर रूबी का उपयोग करना है। पर डिबगिंग के बारे में पटरियों पर एक रूबी गाइड हैHttp://guides.rubyonrails.org/debugging_rails_applications.html
मूल रूप से, -u विकल्प के साथ सर्वर शुरू करें:
./script/server -u
और फिर अपनी स्क्रिप्ट में एक ब्रेकपॉइंट डालें जहां आप कंट्रोलर्स, हेल्पर्स आदि तक पहुंचना चाहेंगे।
class EventsController < ApplicationController
def index
debugger
end
end
और जब आप एक अनुरोध करते हैं और कोड में उस हिस्से को हिट करते हैं, तो सर्वर कंसोल एक शीघ्र वापस आ जाएगा जहां आप कमांड प्रॉम्प्ट से अनुरोध, दृश्य वस्तुएं आदि बना सकते हैं। जब समाप्त हो जाए, तो निष्पादन जारी रखने के लिए सिर्फ 'कॉन' टाइप करें। विस्तारित डिबगिंग के लिए भी विकल्प हैं, लेकिन यह कम से कम आपको आरंभ करना चाहिए।
यहाँ एक उदाहरण के रूप में रिफाइनरी का उपयोग करके एक प्रामाणिक POST अनुरोध करने का तरीका बताया गया है:
# Start Rails console
rails console
# Get the login form
app.get '/community_members/sign_in'
# View the session
app.session.to_hash
# Copy the CSRF token "_csrf_token" and place it in the login request.
# Log in from the console to create a session
app.post '/community_members/login', {"authenticity_token"=>"gT7G17RNFaWUDLC6PJGapwHk/OEyYfI1V8yrlg0lHpM=", "refinery_user[login]"=>'chloe', 'refinery_user[password]'=>'test'}
# View the session to verify CSRF token is the same
app.session.to_hash
# Copy the CSRF token "_csrf_token" and place it in the request. It's best to edit this in Notepad++
app.post '/refinery/blog/posts', {"authenticity_token"=>"gT7G17RNFaWUDLC6PJGapwHk/OEyYfI1V8yrlg0lHpM=", "switch_locale"=>"en", "post"=>{"title"=>"Test", "homepage"=>"0", "featured"=>"0", "magazine"=>"0", "refinery_category_ids"=>["1282"], "body"=>"Tests do a body good.", "custom_teaser"=>"", "draft"=>"0", "tag_list"=>"", "published_at(1i)"=>"2014", "published_at(2i)"=>"5", "published_at(3i)"=>"27", "published_at(4i)"=>"21", "published_at(5i)"=>"20", "custom_url"=>"", "source_url_title"=>"", "source_url"=>"", "user_id"=>"56", "browser_title"=>"", "meta_description"=>""}, "continue_editing"=>"false", "locale"=>:en}
यदि आपको कोई त्रुटि मिलती है, तो आप ये उपयोगी भी पा सकते हैं:
app.cookies.to_hash
app.flash.to_hash
app.response # long, raw, HTML
NameError: undefined local variable or method app for main:Object
ApplicationController.allow_forgery_protection = false
रेल 3 पर रूबी में, यह कोशिश करें:
session = ActionDispatch::Integration::Session.new(Rails.application)
session.get(url)
body = session.response.body
शरीर में URL का HTML होगा।
रूबी 3 पर रूबी में एक मॉडल से रूट और रेंडर (डिस्पैच) कैसे करें
पहले के उत्तर हेल्पर्स को बुला रहे हैं, लेकिन निम्नलिखित नियंत्रक विधियों को कॉल करने में मदद करेगा। मैं रूबी 2.3.2 पटरियों पर रूबी पर इसका इस्तेमाल किया है।
सबसे पहले अपनी .irbrc फ़ाइल में निम्नलिखित कोड जोड़ें (जो आपके होम डायरेक्टरी में हो सकता है)
class Object
def request(options = {})
url=app.url_for(options)
app.get(url)
puts app.html_document.root.to_s
end
end
फिर रूबी ऑन रेल्स कंसोल में आप कुछ इस तरह टाइप कर सकते हैं ...
request(:controller => :show, :action => :show_frontpage)
... और HTML को कंसोल पर डंप किया जाएगा।
किसी भी नियंत्रक क्रिया या दृश्य के अंदर, आप कंसोल विधि को कॉल करके कंसोल को लागू कर सकते हैं ।
उदाहरण के लिए, एक नियंत्रक में:
class PostsController < ApplicationController
def new
console
@post = Post.new
end
end
या एक दृश्य में:
<% console %>
<h2>New Post</h2>
यह आपके दृश्य के अंदर एक कंसोल प्रदान करेगा। आपको कंसोल कॉल के स्थान के बारे में परवाह करने की आवश्यकता नहीं है; यह इसके आह्वान के स्थान पर नहीं बल्कि आपके HTML सामग्री के बगल में प्रदान किया जाएगा।
देखें: http://guides.rubyonrails.org/debugging_rails_applications.html
नियंत्रकों के लिए, आप रूबी कंसोल पर रूबी में एक नियंत्रक ऑब्जेक्ट को तुरंत हटा सकते हैं।
उदाहरण के लिए,
class CustomPagesController < ApplicationController
def index
@customs = CustomPage.all
end
def get_number
puts "Got the Number"
end
protected
def get_private_number
puts 'Got private Number'
end
end
custom = CustomPagesController.new
2.1.5 :011 > custom = CustomPagesController.new
=> #<CustomPagesController:0xb594f77c @_action_has_layout=true, @_routes=nil, @_headers={"Content-Type"=>"text/html"}, @_status=200, @_request=nil, @_response=nil>
2.1.5 :014 > custom.get_number
Got the Number
=> nil
# For calling private or protected methods,
2.1.5 :048 > custom.send(:get_private_number)
Got private Number
=> nil
def show response = @user.contributions end
मैं @user
चर को कैसे ओवरराइड करूं ?
यदि आपने अपना सहायक जोड़ा है और आप चाहते हैं कि इसके तरीके कंसोल में उपलब्ध हों, तो:
include YourHelperName
method_name(args)
कंसोल में कॉलिंग का उपयोग करें ।उदाहरण: कहते हैं कि आपके पास MyHelper (एक विधि के साथ my_method
) 'ऐप / हेल्पर्स / my_helper.rb` है, तो कंसोल में करें:
include MyHelper
my_helper.my_method
app.get
(एक थ्रेड त्रुटि ensues)। क्या कोई तरीका है जिससे मैं सिस्टम को फ्लश कर सकता हूं और अधिक हो जाता है?