Mel*_*emi 4 ruby-on-rails cancan ruby-on-rails-3
试图在我的应用程序中设置Cancan并且遇到问题PostsController.
简而言之,当a Post创建时,我希望它与之关联,current_user所以我的创建操作看起来像这样:
class PostsController < ApplicationController
before_filter :login_required, :except => [:index, :show]
load_and_authorize_resource
...
def create
# @post = Post.new(params[:post]) # <-- covered by load_and_authorize_resource
@user = current_user
@post = @user.posts.create(params[:post])
respond_to do |format|
...
end
...
end
Run Code Online (Sandbox Code Playgroud)
我不确定要做什么load_and_authorize_resource(除了显而易见的事).但是在这样的情况下呢?我是否需要以load_and_authorize_resource某种方式覆盖创建操作?还是有另一种(阅读:更好)的方式来加载@user和然后创建@post?
Dra*_*ken 10
我认为最好的解决方案,因为这是一个独特的问题,你可以改变load_and_authorize_resource这一点:
load_and_authorize_resource :except => [:create]
Run Code Online (Sandbox Code Playgroud)
对此的行动:
def create
authorize! :create, Post
current_user.posts.create(params[:post])
end
Run Code Online (Sandbox Code Playgroud)
小智 3
解决您的问题的一个更简单的解决方案是使用嵌套资源,而不是创建自定义操作
直接取自 CanCan Wiki:
从 1.4 开始,还可以通过方法嵌套,这通常是 current_user 方法。
Run Code Online (Sandbox Code Playgroud)class ProjectsController < ApplicationController load_and_authorize_resource :through => :current_user end这里的所有内容都将通过 current_user.projects 关联加载。
这也应该更安全,因为帖子的加载将通过控制器中其他操作的关联来完成
| 归档时间: |
|
| 查看次数: |
8085 次 |
| 最近记录: |