복붙노트

[RUBY-ON-RAILS] 어떻게 루비 온 레일즈의 콘솔에서 컨트롤러 / 뷰 메소드를 호출하는

RUBY-ON-RAILS

어떻게 루비 온 레일즈의 콘솔에서 컨트롤러 / 뷰 메소드를 호출하는

내가 스크립트 / 콘솔을로드 할 때, 가끔은 컨트롤러의 출력 또는 뷰 도우미 방법으로 플레이를 할 수 있습니다.

이 방법으로는 다음과 같습니다

해결법

  1. ==============================

    1.도우미를 호출하려면, 도우미 개체를 사용 :

    도우미를 호출하려면, 도우미 개체를 사용 :

    $ ./script/console
    >> helper.number_to_currency('123.45')
    => "R$ 123,45"
    

    (당신이 도우미를 제거하기 때문에, 말 :와 ApplicationController의 모든) 당신이 기본적으로 포함 아니에요 도우미를 사용하려면, 그냥 도우미를 포함한다.

    >> include BogusHelper
    >> helper.bogus
    => "bogus output"
    

    컨트롤러의 처리에 관해서는, 나는 닉의 답변을 인용 :

  2. ==============================

    2.스크립트 / 콘솔보기에서 컨트롤러의 액션을 호출하는 쉬운 방법은 / 응답 객체를 조작 할 수 있습니다 :

    스크립트 / 콘솔보기에서 컨트롤러의 액션을 호출하는 쉬운 방법은 / 응답 객체를 조작 할 수 있습니다 :

    > 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.
    

    응용 객체는 ActionController :: 통합의 인스턴스 :: 세션

    내가 레일 2.1 및 2.3에 루비를 사용하여, 나는 이전 버전을 시도하지 않은이 작동합니다.

  3. ==============================

    3.당신은 (레일 3.1 및 4.1에 루비 테스트) 콘솔에서 테스트해야하는 경우 :

    당신은 (레일 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
    
  4. ==============================

    4.여기에 콘솔을 통해이 작업을 수행하는 하나 개의 방법이있다 :

    여기에 콘솔을 통해이 작업을 수행하는 하나 개의 방법이있다 :

    >> 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 :: 자료의 새로운 인스턴스를 생성하는 것은 당신에게 당신의 도우미 가능성이 사용하는 일반보기 방법에 액세스 할 수 있습니다. 그런 다음 확장 YourHelperModule는 자신의 반환 값을 확인시키는 개체에 메서드를 혼합합니다.

  5. ==============================

    5.이 작업을 수행하는 또 다른 방법은 레일 디버거에 루비를 사용하는 것입니다. http://guides.rubyonrails.org/debugging_rails_applications.html에서 디버깅에 대한 루비 레일에 가이드가있다

    이 작업을 수행하는 또 다른 방법은 레일 디버거에 루비를 사용하는 것입니다. http://guides.rubyonrails.org/debugging_rails_applications.html에서 디버깅에 대한 루비 레일에 가이드가있다

    기본적으로 -u 옵션을 사용하여 서버를 시작합니다 :

    ./script/server -u
    

    당신이 컨트롤러, 헬퍼 등에 액세스하고 싶은 곳 그리고 스크립트에 중단 점을 삽입

    class EventsController < ApplicationController
      def index
        debugger
      end
    end
    

    당신이 요청을하고 코드에서 그 부분을 칠 때, 서버 콘솔은 다음 프롬프트 명령 등을 요청, 뷰 객체를 만들 수있는 프롬프트를 반환합니다. 완료되면 바로 실행을 계속하기 위해 '계속'을 입력합니다. 이 확장 디버깅을위한 옵션도 있지만, 이것은 적어도 당신은 시작한다.

  6. ==============================

    6.방법은 다음 POST 방식 인 경우 :

    방법은 다음 POST 방식 인 경우 :

    app.post 'controller/action?parameter1=value1&parameter2=value2'
    

    (여기서 매개 변수는 적용에 따라 될 것입니다.)

    그 다음 GET 방식 인 경우 다른 :

    app.get 'controller/action'
    
  7. ==============================

    7.여기에 예제로 정유를 사용하여 인증 된 POST 요청을하는 방법입니다 :

    여기에 예제로 정유를 사용하여 인증 된 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
    
  8. ==============================

    8.당신은 다음과 같은 루비 온 레일스 콘솔에서 방법에 액세스 할 수 있습니다 :

    당신은 다음과 같은 루비 온 레일스 콘솔에서 방법에 액세스 할 수 있습니다 :

    controller.method_name
    helper.method_name
    
  9. ==============================

    9.레일 3 루비,이 시도 :

    레일 3 루비,이 시도 :

    session = ActionDispatch::Integration::Session.new(Rails.application)
    session.get(url)
    body = session.response.body
    

    몸은 URL의 HTML이 포함됩니다.

    어떻게 행 노선 및 렌더링 (파견) 레일 3 루비의 모델

  10. ==============================

    10.초기의 대답은 헬퍼를 호출하지만, 컨트롤러 메소드를 호출하기위한 도움이 될 것입니다 따르고 있습니다. 나는 레일 2.3.2에 루비에서이를 사용하고 있습니다.

    초기의 대답은 헬퍼를 호출하지만, 컨트롤러 메소드를 호출하기위한 도움이 될 것입니다 따르고 있습니다. 나는 레일 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은 콘솔에 덤프됩니다.

  11. ==============================

    11.어떤 컨트롤러 액션 또는 내부보기, 당신은 콘솔 메서드를 호출하여 콘솔을 호출 할 수 있습니다.

    어떤 컨트롤러 액션 또는 내부보기, 당신은 콘솔 메서드를 호출하여 콘솔을 호출 할 수 있습니다.

    예를 들어, 컨트롤러 :

    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

  12. ==============================

    12.레일 콘솔에 루비 도우미 방법 테스트를위한 한 가지 방법은 다음과 같습니다

    레일 콘솔에 루비 도우미 방법 테스트를위한 한 가지 방법은 다음과 같습니다

    Struct.new(:t).extend(YourHelper).your_method(*arg)
    

    그리고 재 장전을 위해 할 :

    reload!; Struct.new(:t).extend(YourHelper).your_method(*arg)
    
  13. ==============================

    13.컨트롤러를 들어, 루비 온 레일즈 콘솔의 컨트롤러 객체를 생성 할 수 있습니다.

    컨트롤러를 들어, 루비 온 레일즈 콘솔의 컨트롤러 객체를 생성 할 수 있습니다.

    예를 들어,

    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
    
  14. ==============================

    14.당신이 당신의 자신의 도우미를 추가하고 그 방법은 콘솔에서 사용할 수 있도록하려면, 수행

    당신이 당신의 자신의 도우미를 추가하고 그 방법은 콘솔에서 사용할 수 있도록하려면, 수행

    예 : 당신이 (메소드 my_method와) MyHelper가 있다고 가정에서 '응용 프로그램 / 도우미 / my_helper.rb`, 다음 콘솔에서 수행

  15. from https://stackoverflow.com/questions/151030/how-to-call-controller-view-methods-from-the-console-in-ruby-on-rails by cc-by-sa and MIT license