如何在rails3多租户子域风格的应用程序中将“多态控制器”作用域设置为current_account



我试图在帖子模型,上传模型等上使用多态评论模型。通常我会有一个@parent资源范围一个到另一个,以便Rails建立关系。但是由于这是一个多租户子域样式的应用程序,因此还需要将所有资源限定在current_account的范围内。我正在努力解决如何在current_account下范围@父资源。

在ApplicationController我有一个current_account方法,一个find_parent和一个parent_collection方法:

#Application_controller
class ApplicationController < ActionController::Base
  before_filter :current_account
  def current_account
    unless is_root_domain?
     @current_account ||= Account.find_by_subdomain(request.subdomains.first)
    end
  @current_account
  end
 def find_parent
   params.each do |name ,value|
    @parent = $1.pluralize.classify.constantize.find(value) if name =~ /(.*?)_id/
  return if @parent
  end
 end
 def parent_collection
   @parent_collection ||= current_account.send parent.pluralize
 end

结束
#comments_controller with only @parent resource without reference to current_account
class CommentsController < ApplicationController
  before_filter :find_parent
  def new
    @comment = @parent.comments.build
  end
  def create
   @comment = @parent.comments.build(params[:comment])
   .....
   .....
  end
end
#comments_controller using only current_account resource without reference to @parent
class CommentsController < ApplicationController
  before_filter :current_account
  def new
    @comment = current_account.comments.build
  end
  def create
    @comment = current_account.comments.build(params[:comment])
    .....
    .....
  end
end

任何关于如何在控制器中以@parent的方式调用current_account的指南,以及是否需要我放在applications_controller中的parent_collection方法。由于

让我们假设您的@parent资源是Post模型。然后我会想象:
a)你的Account模型has_many :posts
b)你的Post模型belongs_to :account
c)你的Post模型has_many :comments, :as => :commentable
c)你的Comment模型belongs_to :commentable, :polymorphic => true

因此,考虑到这一点,你应该能够建立这样的作用域:
@parent.where(:account_id => current_account.id).comments

你也可以将它重构为可注释的模型:

def Post < ActiveRecord::Base
  scope :by_account, lambda { |account_id| where(:account_id => account_id) }
end

,在控制器中像这样使用它:

@parent.by_account(current_account.id).comments

相关内容

  • 没有找到相关文章

最新更新