ActionView::Resolver
사용자 지정 파일 시스템 대신 데이터베이스에서 뷰를 가져 왔습니다. 그것은 잘 작동합니다. 뷰를 올바르게 당기고 렌더링하지만 레이아웃 안에 렌더링하지 않습니다! 기본적으로 결과는보기 부분 만있는 페이지입니다 (레이아웃, 스타일링 등 없음). 여기에 내가 뭘하는지입니다 :사용자 지정 ActionView :: Resolver가 레이아웃을 무시합니다.
DbResolver
class DbResolver < ActionView::Resolver
require "singleton"
include Singleton
@@view_handler = ActionView::Template.registered_template_handler(:erb)
def find_templates(name, prefix, partial, details)
if (!prefix.empty?)
pages = Page.where("`controller_name` = :controller_name AND `action_name` = :action_name", { :controller_name => prefix, :action_name => name })
templates = pages.collect { |page|
ActionView::Template.new(page.content, "#{page.class} - #{page.id} - #{page.controller_name}/#{page.action_name}", @@view_handler, {
:format => "text/html",
:updated_at => page.updated_at,
:virtual_path => "#{page.controller_name}/#{page.action_name}"
})
}
return templates
end
end
end
BaseController
class BaseController < ApplicationController
layout "public"
end
ContactController
class ContactController < BaseController
prepend_view_path Page.resolver
def index
end
end
페이지
require "lib/db_resolver"
class Page < ActiveRecord::Base
def self.resolver
return DbResolver.instance
end
end
왜 내 layout "public"
은 무시되고있다? 이 일을 내 레이아웃 무시 무시하게하려면 어떻게해야합니까? 로그에서
업데이트, 나는 레일 참으로 layouts/public
레이아웃을 찾기 위해 노력하고 있음을 볼 수 -하지만 데이터베이스에없는 내 해결이 []
를 반환합니다. 나의 이해는 Rails가 파일 시스템을 검사 할 것입니다 (기본 동작). 하지만 대신 모든 것이 잘되고 계속되는 것처럼 가장하는 것처럼 보입니다.
Finding template with: path=about/index; partial=false; details={"formats":["html"],"handlers":["builder","coffee","erb"],"locale":["en"]}
Locating view about/index in database.
Finding template with: path=layouts/about; partial=false; details={"formats":["text/html"],"handlers":["builder","coffee","erb"],"locale":["en"]}
Locating view layouts/about on file system.
Finding template with: path=layouts/public; partial=false; details={"formats":["text/html"],"handlers":["builder","coffee","erb"],"locale":["en"]}
Locating view layouts/public on file system.
Finding template with: path=layouts/public; partial=false; details={"formats":["html","text","js","css","ics","csv","png","jpeg","gif","bmp","tiff","mpeg","xml","rss","atom","yaml","multipart_form","url_encoded_form","json","pdf","zip"],"handlers":["builder","coffee","erb"],"locale":["en"]}
Locating view layouts/public on file system.
Started GET "/about" for 127.0.0.1 at Tue Feb 11 22:05:38 -0500 2014
Processing by AboutController#index as HTML
[1m[36mPage Load (1.0ms)[0m [1mSELECT `pages`.* FROM `pages` WHERE (`controller_name` = 'about' AND `action_name` = 'index')[0m
Rendered Page - 1 - about/index (0.0ms)
Completed 200 OK in 21ms (Views: 19.0ms | ActiveRecord: 1.0ms)