簡體   English   中英

模型中的Rails Pow訪問request.subdomain

[英]Rails Pow access request.subdomain in model

我正在使用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-該代碼在視圖中正常工作。

我正在嘗試此操作,因為我想Ransack搜索hstore type字段中用戶定義的字段。 我首先嘗試使用if ActsAsTenant.current_tenant.data.present? -在本地效果很好,但在Heroku上效果不好(我一直無法弄清楚為什么)。

更新1

我試圖把它放在applications.rb中:

helper_method :my_var

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

然后在模型中:

if @ct.data.present?

但是,@ ct為零。 如何在應用程序控制器中設置要在模型中使用的變量?

模型類不了解請求(因為它們不應該理解,因為它們是數據庫中屬性集合的表示)。 如果您確實需要基於模型中的子域進行設置,建議您創建一個采用請求參數的方法。

目前尚不清楚您在做什么,但是從您提供的代碼中,您可以執行以下操作:

# 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

這解決了我的問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM