我使用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是零。如何在应用程序控制器中设置要在模型中使用的变量?
答案 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