Мне нужно сделать это для контроллера, который использует гем 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
(в настоящее время установленное из 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). Наверное, мой вопрос: почему я должен сказать Rails, что он не должен рендерить шаблоны RJS с макетами? И есть ли лучшее решение? Мне кажется, что это слишком много для хака (плохой вид хака - взлом, который сломается в будущем).