読者です 読者をやめる 読者になる 読者になる

Pebble's Diary

プログラマーの作業メモ

rails 基礎知識

rails

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)