ruby-on-rails – 对Rails中的嵌套资源和身份验证感到困惑
发布时间:2020-12-17 03:36:35 所属栏目:百科 来源:网络整理
导读:让我们看看我是否能够很好地解释自己的疑虑. 我有一个由Devise管理的用户模型.所以在我的路线中我有: devise_for :users 在用户模型中,我与模型计划有关联.关联是: User has_many PlansPlan belongs_to User 此时我还有计划模型的资源,因此我可以获取所有
让我们看看我是否能够很好地解释自己的疑虑.
我有一个由Devise管理的用户模型.所以在我的路线中我有: devise_for :users 在用户模型中,我与模型计划有关联.关联是: User has_many Plans Plan belongs_to User 此时我还有计划模型的资源,因此我可以获取所有计划,显示特定计划等.但我想更进一步. 我希望能够看到特定用户的计划,并让特定用户查看他自己的计划并进行编辑. 所以,例如,每当我去: /用户/:ID /计划 我希望能够看到该特定的计划:id用户.如果访问该URL的用户是登录的用户,我希望他能够编辑这些计划. 我该如何管理所有这些行为?有没有任何宝石可以帮助它?或者我需要在视图中做条件,如果current_user … 解决方法
让我们从路线开始,你可以这样做你的路线:
resources :users do resources :plans,only: [:index] end resources :plans,except: [:index] 我使用了资源:计划内部资源:用户有这样的路径/ users /:user_id / plans,而资源:外面的计划用于其他不需要的动作(编辑,销毁……) user_id,即计划由唯一ID标识,因此您不需要user_id从db中获取它以进行编辑或销毁. 现在对于控制器,我们可以这样做: class PlansController < ApplicationController before_filter :is_plan_owner?,only: [:edit,:update] def index @plans = Plan.where(:user_id => params[:user_id]) end def edit @plan = Plan.find(params[:id]) end private def is_plan_owner? if current_user != Plan.find(params[:id]).user # Scream,shout,call 911 and/or redirect else where end end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |