2014-09-22 65 views
0

我使用POW在我的MAC上本地運行Rails。所以,我的網址有一個子域名。Rails Pow訪問request.subdomain在型號

我想在模型中使用子域,但下面的代碼給了我「未定義的局部變量或方法`請求'」。

代碼:

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上卻不行(我還沒有弄清楚爲什麼)。在模型

helper_method :my_var 

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

然後:

UPDATE1

我試圖把這個在applications.rb

if @ct.data.present? 

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

回答

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 
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 
+0

奇怪的例子你在單例類方法中定義實例變量。 – 2014-09-22 15:51:31

+0

感謝您的幫助!我試着添加你的def,然後這個'if @ ct.data.present?'。但是,@ct是零。看到我更新的問題。 – Reddirt 2014-09-22 16:13:07