示例代码:
#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实现它(解析关联范围)?
如果我们需要在个人资料视图中对项目进行分页 - 选择哪种方法?