トピックは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]
この方法は、ソースへの膨大な数の潜水から私を救った。 それを使用してください!