コードを読んでみる(Railsのlink_toビューヘルパーメソッド)

link_toメソッドがどのように定義されているのか気になったので、ソースコードを読んでみることに挑戦しました!

ヘルパーメソッドのコードは他の部分に比ベれば、初心者にも理解がしやすい気がしました。

 

 

どのように定義元を探すか

自分の場合、githubのから探すよりも、普段使い慣れているエディタを使って探したり読んだりしたかったので、はじめにgit cloneしてしまいました。

 

git clone https://github.com/rails/rails.git

そして、git cloneしたファイルを普段使うsublimetextで開いて、

commant + shift + f で全ファイル検索を使ってlink_toの定義元を探しました。

すると、rails/actionview/lib/action_view/helpers/url_helper.rbにlink_toメソッドの定義元を発見。

 

 

コードを読んでみる

def link_to(name = nil, options = nil, html_options = nil, &block)       

 html_options, options, name = options, name, block if block_given?       

 options ||= {}

 html_options = convert_options_to_data_attributes(options, html_options)

 url = url_for(options)       

 html_options["href"] ||= url

 content_tag("a", name || url, html_options, &block)     

end 

んーー難しい。。

以下、自分なりの解釈です。。

 

1行目: 第一引数にname、第二引数にoptions、第三引数にhtml_options、第四引数にblockを設定しています。

nameとoptionsは必須なようで、初期値はnilです。

 

2行目:block_given?はブロックの有無を判定してくれます。ブロックが存在すれば引数の中身を入れ直します。

3行目:optionsがnilなら空のハッシュを返します。

4行目:url_forを使ってoptionsからアプリケーションを参照するurlを生成しurlと言う変数に代入します。

5行目:html_option["href"]があればその値を、なければurlを返します。

6行目:content_tagを使ってhtmlのタグを生成しています。nameがなければurlやhtml_option、ブロックを表示させます。

 

 

合っている自信がないです。。。