加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读