Rails выступает в роли арендатора, получающего ноль в модели на Heroku
Я использую gem 'acts_as_tenant'
в приложении Rails 3
Я установил арендатора в контроллере приложений на основе домена:
set_current_tenant_by_subdomain(:tenant, :subdomain)
У меня есть код в модели рабочего порядка, который должен использовать current_tenant:
class Workorder < ActiveRecord::Base
acts_as_tenant(:tenant)
if ActsAsTenant.current_tenant.data.present?
ActsAsTenant.current_tenant.data.each do |key, value|
ransacker key do |parent|
Arel::Nodes::InfixOperation.new('->', parent.table[:data], key)
end
end
end
На моем локальном Mac это работает нормально. Но когда я загружаю в Heroku, я получаю эту ошибку:
Sep 17 11:25:38 ndeavor-staging app/web.1: /app/app/models/workorder.rb:8:in `<class:Workorder>': undefined method `data' for nil:NilClass (NoMethodError)
Так, ActsAsTenant.current_tenant
это ноль (по Heroku).
Это почему?
Спасибо за помощь!
Update1
Та же модель использует ActsAsTenant.current_tenant
в where
без проблем
if ActsAsTenant.current_tenant.data != nil
ActsAsTenant.current_tenant.data.each do |key, value|
ransacker key do |parent|
Arel::Nodes::InfixOperation.new('->', parent.table[:data], key)
end
end
end
def self.woclosed
where("wostatus_id = ?", ActsAsTenant.current_tenant.workorder_closed).where(:archive => false)
end
UPDATE2
Я попытался перенести код на контроллер приложений, но это даже не работает локально:
class ApplicationController < ActionController::Base
set_current_tenant_by_subdomain(:tenant, :subdomain)
if current_tenant.data.present?
current_tenant.data.each do |key, value|
ransacker key do |parent|
Arel::Nodes::InfixOperation.new('->', parent.table[:data], key)
end
end
end
Но я получаю:
NameError: undefined local variable or method `current_tenant' for ApplicationController:Class
Update3
Я попробовал другой подход, ища Арендатора, основываясь на поддомене URL. Код поиска в представлении работает нормально, но не в модели.
ct = Tenant.where(subdomain: request.subdomain).first
if ct.data.present?
ct.data.each do |key, value|
ransacker key do |parent|
Arel::Nodes::InfixOperation.new('->', parent.table[:data], key)
end
end
end
1 ответ
Я до сих пор не знаю почему ActsAsTenant.current_tenant
является nil
на Heroku.
Но следующее исправило мою проблему:
class Workorder < ActiveRecord::Base
acts_as_tenant(:tenant)
ct = Tenant.find(self.first.tenant)
if ct.data.present?
ct.data.each do |key, value|
ransacker key do |parent|
Arel::Nodes::InfixOperation.new('->', parent.table[:data], key)
end
end
end