gpt4 book ai didi

ruby-on-rails - Rails 充当租户,在 Heroku 上的模型中获取 nil

转载 作者:行者123 更新时间:2023-12-04 06:34:07 29 4
gpt4 key购买 nike

我在 Rails 3 应用程序中使用 gem 'acts_as_tenant'

我在基于域的应用程序 Controller 中设置租户:

  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 为 nil(在 Heroku 上)。

这是为什么?

感谢您的帮助!

更新1

同一模型在 where stmt 中使用 ActsAsTenant.current_tenant 没有问题:

  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

更新2

我尝试将代码移至应用程序 Controller ,但这甚至无法在本地运行:

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

更新3

我尝试了另一种方法,即根据 URL 的子域查找租户。查找代码在 View 中工作正常,但在模型中没有。

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

最佳答案

我仍然不知道为什么 ActsAsTenant.current_tenant 在 Heroku 上是 nil

但是,以下解决了我的问题:

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

关于ruby-on-rails - Rails 充当租户,在 Heroku 上的模型中获取 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25898092/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com