我正在使用子域开发多租户应用程序。查看我的控制器
class ApplicationController < ActionController::Base
before_filter :handle_subdomain
def handle_subdomain
@tenant = Tenant.find_by_subdomain(request.subdomain)
if !@tenant.nil?
MultiSchema.set_schema_path("#{request.subdomain}, public")
else
render_404
end
end
end
class ObjectivesController < ApplicationController
before_action :set_objective, only: [:show, :edit, :update, :destroy]
end
- 如果我提出请求 'test.url/objectives'(call to
ObjectivesController#index
) 效果很好! 如果我做请求'test.url/objectives/1'(调用
ObjectivesController#show
)不起作用。我得到错误:ActiveRecord::StatementInvalid in ObjectivesController#show PG::UndefinedTable: 错误:关系“objectives”在字符 29 处不存在:选择“objectives”。* FROM “objectives” WHERE “objectives”。“id”= $1 限制 1
edit
和的结果相同destroy
。目标表不存在。我认为这是由于第一次运行ObjectiveController#set_obectives
,所以它没有在public
架构上找到目标表。我需要先运行ApplicationController#handle_subdomain
以设置正确的架构,然后运行ObjectiveController#set_obectives
. 我怎样才能做到这一点?