Home > Uncategorized > Railsでコントローラを作らずにerbだけ実行する方法

Railsでコントローラを作らずにerbだけ実行する方法

  • 2008-02-03 (Sun) 15:08
  • Uncategorized

別にPHPの話題とは関係ないのですが、PHP見たいにHTMLにぺっとコードを貼って動かしたいなーというケースはRailsでアプリを組んでいて思う事が多々あります。

ヘルプページは静的なHTMLなんだけど、レイアウトはRails部分と共用したいなーとか、ヘッダ部分にログイン中のユーザ名だけは入れておきたいなーとか。

そこで、そんなときのため、http://example.com/helpにアクセスすると、RAILS_ROOT/erb/help.html.erbが実行されるような仕組みを考えてみました。めんどくさいのでプラグインにはしていません。

ルートファイルと、アプリケーションコントローラに下記のコードを追加してください。

config/routes.rbの最後の行に追加

   map.connect '*path', :controller => 'application', :action => 'rescue_404' if ::ActionController::Base.consider_all_requests_local

app/controllers/application.rbの適当な所に追加

  def rescue_404
    absolute_root = File.join(File.expand_path(RAILS_ROOT),'')
    template = File.expand_path(File.join('erb', *params[:path]), RAILS_ROOT)
    if template.index(absolute_root) == 0
      template = File.join(template, 'index') if File.directory?(template)
      ['.html.erb', '.erb', '.rhtml'].each do |ext|
        return render(:file => template+ext) if File.file?(template+ext)
      end
    end
    render :file => File.join(RAILS_ROOT, 'public', '404.html')
  end

これで、RAILS_ROOT/erbディレクトリを作り、そこにerbファイルを置くと直接実行することができるようになります。
ApplicationControllerから呼ばれて実行されるので、アプリによってはログイン中のユーザ情報なども取得する事ができると思います。

p.s
前回のCookieSessionのjpmobile対応はあきらめました。色々ややこしいことが分かってきたので。。。

Related posts

    No Related Posts

masuidrive(増井 雄一郎)
PukiWikiなどのオープンソース活動を経て、2005年からRuby on Railsに的を絞り、WEB2.0社PingKingやニフティ社アバウトミーの開発に関わる。これまでのフリー活動から転身し、2007年は1年だけ会社員として働いた後、起業のため渡米。2008年4月にBig Canvas Inc.設立、iPhoneアプリなどの開発を行う。2009年11月に退社し、現在、米Appcelerator社のテクニカルエバンジェリスト。
Twitterは、@masuidrive

Comments:4

ななし 08-02-05 (Tue) 18:42

ややこしい中でも、最大の所、または最大にムカついた所を是非教えて下さい。
自分の至ら無さとか、はぐらかしは無しで(笑)

masuidrive 08-02-05 (Tue) 18:47

URLを生成したあとに、sessionの中身を変更したときにそれが反映できない事が最大の原因でした。
filterを使って出来ない事もないけど、それならmod_chxjみたいなものでcookieをエミュレーションしたほうが良さそうだなと思ったので、やめました。

trooper 08-05-06 (Tue) 10:23

古いエントリですみません。
jpmobileとは関係ないのですが、FLASHからデータPOSTする際にうまくCookie効いてくれないんで、
パラメータでCookieStoreの値を送るコードを書いたんですね。
で、masuiさんが指摘している「URLを生成したあとに、sessionの中身を変更したときにそれが反映できない」も
そうなんでしょうけど、そもそもCookieStoreの場合、Cookie以外の方法でRailsに送っても、正常に認識してくれないっぽいです。。
これそういう仕様なんでしょうかね??CookieStoreっていうだけあって。。泣

うーん、FLASH使ってsession維持するの難しそうだな。。

trooper 08-05-06 (Tue) 10:43

あ、なんか全エントリ読んだら完全に勘違いしていたことに気付きました。。
そもそも、CSRF対策をハックしないといけないんですね。。。
ちょっと希望がもてました!

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://blog.masuidrive.jp/index.php/2008/02/03/direct-erb/trackback/
Listed below are links to weblogs that reference
Railsでコントローラを作らずにerbだけ実行する方法 from @masuidrive blog

Home > Uncategorized > Railsでコントローラを作らずにerbだけ実行する方法

Search
Feeds
Meta

Return to page top