3つの便利なRailsコンソールのヒント

トピックは37signalsに関する記事の無料翻訳です。



昨日、Rails APIのドキュメントを詳しく調べてみたところ、これまで見たことのないコンソールの便利なrails関数がいくつか見つかりました。 以前にirbとRailsについて多くの 出版物がありましたが、これから新しいことを学ぶことを望みます。 上記の例は、Basecamp Next on Railsバージョン3.2.3を使用して作成されています。



アプリケーションに没頭する



コンソールでappメソッドを使用すると、セッションのインスタンスが作成され、その結果、通常の統合テストの機能を使用できます。



>> app.class

=> ActionDispatch::Integration::Session








ルートの形成には常にストレスが伴います。 そこに接続するにはどのモジュールが必要でしたか? default_url_optionsを指定することを覚えていましたか? グーグルを停止して、アプリを使用するだけです:



>> 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を見て、このオブジェクトが他に何に役立つを調べてください。



ヘルパーを試す



コンソールセッションをRailsヘルパーにリンクするのも苦痛ですが、ヘルパーはそれを修正できます! また、ActionViewが認識しているHTMLタグまたはその他のRailsヘルパーを作成するために使用することもできます。



>> helper.truncate("Testing", length: 4)

=> "T..."



>> helper.link_to "Home", app.root_path

=> "Home"








ヘルパーの別のアイデアは、ヘルパーメソッド内でインスタンス変数を使用することです。 はい、これは一般的なアシスタントにとって悪い考え™であることは知っていますが、私のRailsアプリケーションの1つでもそれなしではできません。 メソッドの小さな例を次に示します。



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








古い友人Object#instance_variable_setの助けを借りて、OOPの基本原則に違反することができます。コンソールでヘルパーを試してみましょう。



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








paramsを使用してヘルパーを操作するのも簡単ではありません。 ただし、わずかなハックでActionViewを取得できます。 結局のところ、これがコンソールです! アシスタントメソッドがあるとします。



def javascript_debugging_options

if params[:javascript_debugging] == "enabled"

{ debug: true, digest: false }

else

{}

end

end








通常、ActionViewでは、ユーザーから送信されたパラメーターを判断するために、コントローラーからのActionDispatch :: Requestのすべてが必要です。 あなたは小さな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}








この方法はどこから来たのですか?



目的のメソッドの正確な位置を追跡することは、必ずしも簡単ではありません。 幸いなことに、RubyはMethod#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]








この方法は、ソースへの膨大な数の潜水から私を救った。 それを使用してください!



All Articles