- 更新日: 2014年6月12日
- Rails
Rails でコントローラーとビューの共通メソッドを作成
ビューで共通して使うメソッドを ApplicationHelper に一旦作成したのですが、よく考えるとコントローラーからも使う機会があるので、コントローラーからも使えるようにしたいと考えなおした。解決策を調べたら、ApplicationController のメソッドとして作成して、helper_method を使う方法が簡単でした。
AbstractController::Helpers::ClassMethods
ApplicationController にコントローラーとビューに共通のメソッドを作成
app/controllers/application_controller.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
class ApplicationController < ActionController::Base # ... helper_method :canonical_user_path # return canonical user path def canonical_user_path(user) unless user.is_a? User user = User.find(user) end if user.blank? return nil end if user.provider.blank? && user.userid.present? # for a normal user who has a canonical userid. # return user's path like root/takafumi "/#{user.userid}" else # for oauth users. they don't have a canonical userid. # return user's path like root/users/123 user_path(user) end end # ... end |
ApplicationController に普通にメソッド定義して、helper_method に指定してやるだけで、ビューのどこからでも使えるようになります。便利!
作成した canonical_user_path メソッドは、ユーザーが正当な userid を持っている場合は、ユーザーのプロフィールページのURLとして、http://example.com/takafumi のようなドメイン名直下にユーザー名というパスを返すメソッドです。Twitter とか最近のウェブサービスは、大体ユーザープロフィールのページURLはこの形にするのがトレンドじゃないでしょうか?分かりやすいし。
canonical_user_path メソッドについては、明日もう少し詳しく書く予定です。
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!