RailsCasts6 Shortcut Blocks with Symbol to_ProcはSymbolをto_に変換procはblockを簡略化する
3112 ワード
次のコード
ruby
Rails Consoleの次の例で説明する.
terminal
結果に含まれる2つのプロジェクトオブジェクトはリスト形式で返されますが、この2つのオブジェクトの名前を取得するにはどうすればいいですか?第1の方法は、
terminal
to_Procでは、コードブロックに渡す必要がある論理に名前を付けることができます.これにより、コードブロックに書かれた論理は、
terminal
チェーン呼び出しが必要な場合、このフォーマットの役割はさらに顕著になります.次のコードは、より読みやすさが向上していますか?
terminal
もちろん、
terminal
最初は文法が変に見えるかもしれませんが、チェーン呼び出しが必要な場合は、絶対にあなたの手伝いです.
変換元:http://railscasts.com/episodes/6-shortcut-blocks-with-symbol-to-proc?language=zh&view=asciicast
find
の方法では、奇妙に見える文法で、1つの&記号の後ろに名前が付いています.to_と呼ばれています.proc.RailsによるRubyの機能拡張です.ruby
class Project < ActiveRecord::Base
has_many :tasks
def self.all_names
find(:all).collect(&:name)
end
end
Rails Consoleの次の例で説明する.
Rails script/console
コマンドRailsコンソールを起動します.まず、Project
をすべて取得します.terminal
Laa-Laa:todo eifion$ script/console
Loading development environment (Rails 2.2.2)
>> projects = Project.find(:all)
=> [#<Project id: 1, name: "Write another ASCIIcast", created_at: "2008-12-29 09:32:47", updated_at: "2008-12-29 09:32:47">, #<Project id: 2, name: "Go out walking", created_at: "2008-12-29 09:33:04", updated_at: "2008-12-29 09:33:04">]
結果に含まれる2つのプロジェクトオブジェクトはリスト形式で返されますが、この2つのオブジェクトの名前を取得するにはどうすればいいですか?第1の方法は、
collect
の方法を用いて、コールバック用のコードブロックにプロジェクト名を返す論理を記入することである.collect
メソッドの役割は、リストを巡回し、各項目のオブジェクトにコードブロックで定義された論理操作を実行させ、戻り値を得ることであり、元のリストに基づく戻り値リストを返す.terminal
>> projects.collect { |p| p.name }
=> ["Write another ASCIIcast", "Go out walking"]
to_Procでは、コードブロックに渡す必要がある論理に名前を付けることができます.これにより、コードブロックに書かれた論理は、
&
のパラメータを入力するだけで他の場所で定義できます.次のようになります.terminal
>> projects.collect (&:name)
=> ["Write another ASCIIcast", "Go out walking"]
チェーン呼び出しが必要な場合、このフォーマットの役割はさらに顕著になります.次のコードは、より読みやすさが向上していますか?
terminal
>> projects.collect(&:name).collect(&:upcase)
=> ["WRITE ANOTHER ASCIICAST", "GO OUT WALKING"]
もちろん、
collect
メソッドに限らず、すべてのコードブロックでto_を使用することができます.proc.例えば、any
メソッドに対して、検査項目が正常に展開されているかどうかを定義することができるto_Procは、all
メソッドに対して保存されたto_を定義することができる.procなど.terminal
>> projects.all?(&:valid?)
=> true
>> projects.any?(&:valid?)
=> true
>> projects.each(&:save!)
=> [#<Project id: 1, name: "Write another ASCIIcast", created_at: "2008-12-29 09:32:47", updated_at: "2008-12-29 09:32:47">, #<Project id: 2, name: "Go out walking", created_at: "2008-12-29 09:33:04", updated_at: "2008-12-29 09:33:04">]
最初は文法が変に見えるかもしれませんが、チェーン呼び出しが必要な場合は、絶対にあなたの手伝いです.
変換元:http://railscasts.com/episodes/6-shortcut-blocks-with-symbol-to-proc?language=zh&view=asciicast