Rails Pow访问模型中的request.subdomain

时间:2014-09-22 15:41:10

标签: ruby-on-rails

我使用POW在我的MAC上本地运行Rails。所以,我的网址有一个子域名。

我想在模型中使用子域名,但是下面的代码给了我"未定义的局部变量或方法`request'"。

代码:

class Vehicle < ActiveRecord::Base
acts_as_tenant(:tenant)

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

PS - 代码在视图中工作正常。

我尝试这个是因为我想在hstore类型字段中搜索用户定义字段的Ransack。我首先尝试使用if ActsAsTenant.current_tenant.data.present? - 这在本地很有效,但在Heroku上却没有(我还没有找到原因)。

UPDATE1

我尝试将它放在applications.rb中:

helper_method :my_var

def my_var
  @ct = Tenant.find_by_subdomain!(request.subdomains.first)
end

然后在模型中:

if @ct.data.present?

但是,@ if是零。如何在应用程序控制器中设置要在模型中使用的变量?

2 个答案:

答案 0 :(得分:0)

模型类不了解请求(因为它们不应该看,因为它们是数据库中属性集合的表示)。如果你真的需要根据模型中的子域设置一些东西,我建议创建一个接受请求参数的方法。

您不清楚自己在做什么,但是根据您提供的代码,您可以采取以下措施:

# app/models/vehicle.rb
class Vehicle < ActiveRecord::Base
  acts_as_tenant(:tenant)

  def self.ct=(request)
    @ct = Tenant.where(subdomain: request.subdomain).first
  end
end

答案 1 :(得分:0)

这解决了我的问题:

class Vehicle < 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