在一个多租户应用程序上工作,其中我的大多数模型都有一个tenant_id 字段,因此我可以通过关联 ( current_tenant.applications.find(params[:id])
) 查找来确保读取权限:
class Application < ActiveRecord::Base
belongs_to :tenant
has_many :app_questions, :conditions => proc {{:tenant_id => tenant_id}}, :dependent => :destroy
end
我喜欢这让我可以优雅地创建一个自动设置tenant_id的新AppQuestion:
@application = current_tenant.applications.find(params[:app_question][:application_id])
@question = @application.app_questions.build(params[:app_question])
#...
问题是,当我尝试使用includes()
预加载关联时,它会引发错误:
current_tenant.applications.where(:id => params[:id]).includes(:app_questions => :app_choices).first
NoMethodError (undefined method `tenant_id' for #<Class:0x007fbffd4a9420>):
app/models/application.rb:7:in `block in <class:Application>'
我可以重构,这样我就不必在关联条件中使用 proc,但我想知道是否有人有更好的解决方案。
ref确实说:“如果您需要在运行时动态评估条件,请使用 proc”