selectの使い方
それでは、よく使用されるhelperの1つのselectの使い方を学んでいきましょう。
まず、selectを使用するための環境を整えていきます。
今回使用するコントーラーとビューを作成するためにコマンドプロンプトに以下のコードを入力してください。
[Tutorialというコントローラーとtestというビューを作成する]
rails g controller Tutorial test
[実行結果]
create app/controllers/tutorial_controller.rb
route get 'tutorial/test'
invoke erb
create app/views/tutorial
create app/views/tutorial/test.html.erb
invoke test_unit
create test/controllers/tutorial_controller_test.rb
invoke helper
create app/helpers/tutorial_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/tutorial.coffee
invoke scss
create app/assets/stylesheets/tutorial.scss
これでコントローラーとビューが作成されました。
それではViewにselectを表示するためにappl/views/tutorial/test.html.erbに以下のコードを入力してください。
[appl/views/tutorial/test.html.erbの内容]
<%= select_tag 'samrai[number]', options_for_select(["1", "2", "3", "4", "5","6"]) %>
<%= select :samurai, :pet, [["犬", "dog"], ["猫", "cat"],["馬", "horse"],["牛", "cow"]] %>
続いて、結果を確認するためにコマンドプロンプトにrails sと入力して、サーバーを起動してください。
そして、test.html.erbのルーティングを確認するためにapp/config/route.rbを開いてください。
[app/config/route.rbの内容]
get ’tutorial/test'
となっていることを確認できます。
以下のURLにアクセスして、test.html.erbを開いてください。
http://localhost:3000/tutorial/test
(補足http://localhost:3000の箇所は各自の開発環境により読み替えてください。)
[実行結果]
![Screen Shot 2560-08-03 at 13.39.21]()
![Screen Shot 2560-08-03 at 13.39.30]()
このように、selectで選択肢を用意できました。
次にselectのオプション(prompt)を使って、先頭に『選択してください。』を追加してみましょう。
[appl/views/tutorial/test.html.erbに追加する内容]
<%= select_tag 'samrai[number]', options_for_select(["1", "2", "3", "4", "5","6"]) %>
<%= select :samurai, :pet, [["犬", "dog"], ["猫", "cat"],["馬", "horse"],["牛", "cow"]],:prompt => "選択してください" %>
続いて、結果を確認するためにコマンドプロンプトにrails sと入力して、サーバーを起動してください。
以下のURLにアクセスして、test.html.erbを開いてください。
http://localhost:3000/tutorial/test
[実行結果]
![Screen Shot 2560-08-03 at 13.46.50]()
このように、先頭に『選択してください』を追加できました。
独自helperの作り方
Railsではあらかじめ用意されているhelperの他に自分でヘルパーを作成できます。
今回はヘルパーを3つ用意しました。
app/helpers/tutorial_helper.rbに以下のコードを追加してください。
helperを設定するためにはhelpersのファイルを修正する必要
があります。
heleprファイルはrails g controller〜の段階で作成されます。
[app/helpers/tutorial_helper.rbの内容]
module TutorialHelper
def hello(name)
"こんにちは! #{name}さん。"
end
def to_yen(money)
"#{money}円"
end
def addTax(money,rate)
taxed_money = (money*rate).round
"税込#{taxed_money}円"
end
end
これで、名前を入れるとこんにちは!〜を自動で追加、円を追加、税込価格に変換するヘルパーを設定できました。
では実際に、ビューで使用してみましょう。
[appl/views/tutorial/test.html.erbに追加する内容]
<%= hello("長瀬来") %>
<%= to_yen(20) %>
<%= addTax(100,1.08) %>
続いて、結果を確認するためにコマンドプロンプトにrails sと入力して、サーバーを起動してください。
以下のURLにアクセスして、test.html.erbを開いてください。
http://localhost:3000/tutorial/test
[実行結果]
![Screen Shot 2560-08-03 at 14.15.04]()
このように、独自でヘルパーを設定することで自由に様々な操作を自動化できるので痒い所に手が届くようになります。
すべてのhelperが読み込まれるのを止める
Railsの初期設定では、すべてのhelperがすべてのView(ビュー)から読み込めます。
では同じ名前のhelperがあった場合はどうなるのでしょうか?
もしも同じ名前のhelperがあった場合には、app/helpersのファイルの名前順の降順に呼び出されるようになります。(下に設定されているhelperほど優先される)
これでは、自分が使用しようと思っているhelperが確実に呼び出されるわけではありません。
なので、すべて呼び出されないように設定を変更する必要がでてくるわけです。
さっそく、すべて呼び出されないように設定してみましょう。
config/application.rbに以下コードを追加してください。
[config/application.rbの内容
module DailyCounter
class Application < Rails::Application
〜 (中略)各種初期設定〜
config.action_controller.include_all_helpers = false
end
end
たったこれだけで、helperがすべて呼び出される問題を解決することができます。
helperがうまく機能しないと思った時は設定してみてください。
モデルでhelperを使用する方法
helperは初期設定ではビューを対象にして作成されています。
なので、モデルでhelperを使用したいときはhelperを明示的にincludeする必要があります。
class モデル名 < ApplicationRecord
include ActionView::Helpers
end
モデルの始めにこのようにHelpersを呼び出すコードを追加してあげれば、モデルでもhelperを使えるようになります。
また、特定のhelperだけを呼び出す場合は以下のように名前を指定してあげてください。
class モデル名 < ApplicationRecord
include ActionView::Helpers::TutorialHelper
end
まとめ
いかがでしたでしょうか?
この記事では、helperの使い方を解説しました。
Railsにあらかじめ定義されているhelperだけではなく、独自にhelperも定義して開発を進めていくことによってよりスマートに開発を進めていけます。
また、モデルやコントローラーにもhelperをincludeすれば使用可能なのでhelperは多くの場所で活躍できます。
この記事を機会にRailsにどんなhelperがあるのか、またどんな独自helperを作ることができるのかを調べてみてはいかがでしょうか。
もしhelperの使い方について忘れてしまったらこの記事を確認してくださいね!