active_scaffold
宝石を使用するコントローラーに対してこれを行う必要があります。次のようなコントローラーがあります。
class Admin::UsersController < ApplicationController
layout 'admin'
active_scaffold :users do |config|
config.search.columns = [:first_name, :last_name]
end
end
Rails 2.3.10 を使用していたときはうまく機能していましたが、Rails 3.0.10 にアップグレードしています。アップグレードの一環として、互換性を保つために(現在は のブランチactive_scaffold
からインストールされている) アップグレードする必要がありました。私たちが抱えていた問題の 1 つは、テーブルの検索が機能しないことでした。ログファイルに次のように表示されます。rails-3.0
git://github.com/activescaffold/active_scaffold
Rendered <snip>/gems/active_scaffold-25b3d724f35b/frontends/default/views/list.js.rjs within layouts/admin (923.5ms)
コントローラーで指定されたレイアウトで RJS テンプレートをレンダリングしていることに注意してください。それは私には不合理なデフォルトのように思えます。デフォルトでは、 RJS テンプレートはレイアウトなしでレンダリングすべきではありませんか? とにかく、私はそれを次のように修正しました:
class Admin::UsersController < ApplicationController
layout :admin_layout
private
def admin_layout
respond_to do |format|
format.js { false }
format.html { 'admin' }
end
end
end
これにより、検索とページネーションの問題が修正されます。(RJS テンプレートはレイアウトなしでレンダリングされるようになったため、ブラウザは生成された Javascript を実行できます)。私の質問は、レイアウトを使用して RJS テンプレートをレンダリングしないように Rails に指示する必要があるのはなぜですか? そして、より良い解決策はありますか?これは私にはハックが多すぎるように感じます (悪い種類のハック --- 将来壊れる種類のハック)。