RailsでPrototype.jsの代わりにjqueryを使うためのプラグインとしてJrailsというものがあり、非常に便利なのですが、ActiveScaffoldというこれまた非常に便利なプラグインを同時に使用しようとすると、ActiveScaffoldを適用したページ表示の際に、Prototype.jsが読み込まれてないですよー、といった感じで怒られてしまいます。
※ActiveScaffoldはScaffoldのAjax版みたいなものです。詳しくは
http://activescaffold.com/

実際Jrailsを使ってるので
<%= javascript_include_tag :defaults %>


ってやってもPrototype.jsではなくjQueryインクルードのタグが生成されます。

で、どうやるのかな? と調べたところ、
ちゃんとActiveScaffoldのWikiにありました。

Jrailsを適用したくない、というか、Prototype優先にしたいコントローラで、
  ActionView::Helpers::PrototypeHelper::JQUERY_VAR = 'jQuery'

のようにして、JavaScriptの$をjQueryで上書きさせない様にしてやります。


実際にJrailsのソースを見ると、

unless const_defined? :JQUERY_VAR
  JQUERY_VAR = '$'
end

といった記述があります。

ですので、別にjQueryという文字列でなくても良いわけで、jQueryのサイトにもあるように
var $j = jQuery.noConflict();
$j とかでも問題なし。


私の場合、ActiveScaffoldはAdmin系のページでしか使わないので、Admin系専用の基底コントローラクラスを作って、他のAdmin系コントローラはそいつを継承させるようにしてるため、こんな感じで対応してあげればOKでした。
class Admin::AdminControllerBase < ApplicationController
  ActionView::Helpers::PrototypeHelper::JQUERY_VAR = 'jQuery'
  layout 'admin'
  before_filter :block_none_admin
  ActiveScaffold.set_defaults do |config|
    config.ignore_columns.add [:created_at, :updated_at]
  end
end

adminというlayoutを使っているので、そいつの中もこんな感じに jQuery.noConflict してやってPrototypeを読み込んであげればOKです。
effects スクリプトも指定するのも忘れないようにましょう。

<%= javascript_include_tag :defaults %>
		
<%= javascript_include_tag "prototype", "effects"  %> 
<%= active_scaffold_includes %>

あ、でもページングでエラーになる、、。 もうちょっと調べないと駄目だ、、、。