0

我有一个多态模型 TimeReport。您可以将内部 TimeReport 或 TimeReports 与项目关联。但是,如果您有与项目关联的 TimeReport,则只能将其与您所属的项目关联。

那么,我怎么会CanCan呢?我真的做不到

can :create, TimeReport, project_id: user.project_ids

正如我从一开始就想要的那样。有什么建议吗?(我当然可以在模型验证规则中这样做,但我宁愿不这样做,除非有充分的理由。)

4

1 回答 1

1

您可能需要提供更多信息才能获得好的答案...您说 time_report 与项目相关联,这意味着time_report.project存在吗?

在您的控制器中:

  @time_report = TimeReport.new # or whatever
  authorize! :create, @time_report

在能力:

  can [ :create ], TimeReport do |time_report|
    user.project_ids.include? time_report.project_id 
  end

请注意以下事项:

  • 您可能无法使用 load_and_authorize_resource,但也许可以。我倾向于不使用它,但如果 @time_report 正是您需要的,那么它会奏效。

  • 在您的能力中time_report传递的变量与您的控制器中的变量相同。这就是使 CanCan 变得美丽的原因;)can()@time_report

于 2013-10-27T00:50:26.020 回答