使用Pundit解析关联范围

时间:2017-03-10 09:26:39

标签: ruby-on-rails ruby pundit

示例代码:

#model
class Profile < AR:Base
  has_many :projects
end

#controller
class ProfilesController < AC
  def show
    @user = Profile.find(params[:id])
  end
end

#view

@profile.projects.each do |project|
  = render something
end

任何用户都可以查看任何个人资料,但项目应按可见性进行过滤(如公共/私人项目)。

我有意添加一个ivar,因为它违反了Sandi Metz的规则

  

控制器只能实例化一个对象。因此,视图只能   知道一个实例变量,视图应该只发送消息   到那个对象(不允许@ object.collaborator.value)。

我现在看到它的唯一方法是引入另一个类(facade)来做这些事情,比如:

class ProfilePresenter
  def initialize(profile, current_user)
    @profile = profile
    @current_user
  end

  def visible_profiles
    ProjectPolicy::Scope.new(current_user, profile.projects).resolve
  end
end

我错过了什么吗?

如何使用Pundit实现它(解析关联范围)?

如果我们需要在个人资料视图中对项目进行分页 - 选择哪种方法?

0 个答案:

没有答案