railsは細かい部分の仕様の説明が明快に行われているドキュメントがない。トライアンドエラーで得た知見をメモしておく。
- hoge.html.erb内で使えるクラスのインスタンス変数(@hoge,@fuga等)はコントローラークラスのインスタンス変数である。モデルクラスのインスタンス変数ではない。
- すべてのヘルパー(app/helper/に置かれたすべてのhoge_helper.rb内のメソッド)はfuga.html.erb内ですべて利用できる。 例えば、user.html.erbからcomments_helper.rbのメソッドも利用可能である。 ヘルパーはrubyのモジュールである。例えば、以下のようになっている。
module UserHelper def signed_in? ... end end
- ヘルパーをコントローラーから使いたい場合は、コントローラー定義内に、
include UserHelper
と追加すると、そのコントローラークラスにモジュールがMixInされるので、そのコントローラー内でヘルパーメソッドが使えることになる。
すべてのコントローラークラスはApplicationControllerを継承しているので、すべてのコントローラーから使いたい場合は、
application_controller.rbにincludeすれば良い。
- resourceをネストした時、例えば、routes.rbで
resources :shops do resources :comments end
のようにした時の、このパスへのリンクを作る時は、2つのパラメータを渡す必要がある。
edit_shop_comment GET /shops/:shop_id/comments/:id/edit(.:format) comments#edit
edit_shop_comment_path(@shop, @comment)