rails使用current_user和匹配路由设计:id

时间:2012-05-08 00:27:01

标签: ruby-on-rails ruby-on-rails-3 devise ruby-on-rails-3.2 controllers

我遇到的问题是设计current_user会混淆我的模型:id为用户:id。

路线:

match "/causes/:id/:slug" => "causes#show", :as => :cause, :via => 'get'
match "/causes/:id/:slug/edit" => "causes#edit", :as => :edit_cause, :via => 'get'
match "/causes/:id/:slug" => "causes#update", :via => 'put'

resources :causes, :only => [:index, :new, :create]

在我的:导致控制器:

before_filter :check_privileges, only: [:new, :create, :edit, :new, :update]

def check_privileges
    #when I use this code everyone can access edit, etc.
    redirect_to root_path unless current_user
end

并在我的:导致模型

  belongs_to :user

出于某种原因,当我完全使用current_user时,在这个控制器中,它始终认为current_user等于/ cause /:id /:slug /

中的id

我已尝试将检查权限代码放在应用程序控制器中,

我甚至尝试过分配这样的代码:

def check_privileges
    #when I use this code no one can access edit, etc
    @user = User.find_by_id(params[:id])
    redirect_to root_path unless @user
end

我需要帮助,有人有建议吗?我想要它做的就是验证用户是当前用户,这样每个人都无法编辑原因。

1 个答案:

答案 0 :(得分:0)

您的帖子有点令人困惑。 IIRC设计将当前用户ID存储在会话中,并且不会从URL中获取它。

看到这是与权限相关的问题并推出自己的解决方案。我强烈推荐一种替代方案。

https://github.com/ryanb/cancan

这适用于设计并且应该解决您的问题