рельсы - как переопределить виды по умолчанию - PullRequest
0 голосов
/ 01 декабря 2009

по умолчанию, когда я прошу контроллер rails сделать сообщения / индекс, он делает

def index
 respond_to{|fmt| fmt.html}
end

и показывает app / views / messages / index.html.erb

есть клиент, который хочет, чтобы его экземпляр платформы по-разному отображал просмотров (и изменения нельзя сделать только с помощью css).

решение, о котором я думаю, было бы

  1. создать каталог app / views / # {customername}, который будет иметь ту же структуру, что и app / views, но будет иметь только те представления, которые должны переопределять стандартные.

  2. установка константы массива, содержащей список представлений, которые должны быть переопределены (если нет, они должны загружать представления по умолчанию)

    CUSTOM_VIEWS["messages"]=["index","show","edit"] 
    

    где-то в пользовательском конфигурационном файле

  3. во всех действиях контроллера делать что-то вроде

    def index
     respond_to do |fmt| 
      fmt.html do
       if CUSTOM_VIEWS[params[:controller]].include?(params[:action])
        #override default app/views/messages/index.html.erb with app/views/customername/messages/index.html.erb 
        render "#{customername}/#{params[:controller]}/#{params[:action]}"
       end
      end
     end
    end
    

или есть лучшее / быстрое решение / плагин для этого?

Ответы [ 2 ]

1 голос
/ 02 декабря 2009

я верю, что "view_paths" вместе с "prepend_view_path" могут быть ответом на мой вопрос

например

http://www.axehomeyg.com/2009/06/10/view-path-manipulation-for-rails-with-aop/

UPD:

решено простым добавлением в application_controller

def override_views
 if APP_CONFIG['pr_name']!=nil
      ActionController::Base.view_paths=[RAILS_ROOT+"/app/custom_views/"+APP_CONFIG['pr_name'],RAILS_ROOT+"/app/views/"]
 end 
end

где APP_CONFIG ['pr_name'] - это конкретное имя продукта.

в основном то, что он делает, загружает пользовательское представление из приложения / custom_views / customername /, если оно существует для определенного действия контроллера, если нет, оно загружает представление по умолчанию из приложения / views /

1 голос
/ 01 декабря 2009

Это должно помочь: http://railscasts.com/episodes/125-dynamic-layouts

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...