我有一个具有管理员字段的用户模型。这是布尔值。如果admin字段等于true,我只想让用户创建/修改/更新“Season”。我怎么会在铁轨上这样做呢?我把这个逻辑放在“季节”控制器中吗?与我的路线配置有什么关系?
答案 0 :(得分:2)
您可以使用单表继承,例如创建表用户,再创建2个模型,如
Admin < User
{ default_scope {where(user_type :: college)} .... }
和
Supplier < User
{ default_scope {where(user_type :: supplier)} .... }
答案 1 :(得分:1)
将layout_weight
中的逻辑放入SeasonsController
,执行所需的错误操作,除非他们是管理员。
before_action
答案 2 :(得分:1)
我建议您在控制器中添加before_action
过滤器:
class SessionsController < ApplicationController
before_action :check_permission!, only: [:create, :update]
# Your create, update actions
private
def check_permission!
render status: :forbidden unless current_user.admin?
end
end
答案 3 :(得分:0)
您可以创建before_action
回调来检查用户的管理字段是真还是假。
class SeasonsController
before_action :check_admin_field, only: [:edit, :new]
protected
def check_admin_field
return User.find(params[:user_id]).admin_field
# if you're using devise gem then check current_user.admin_field
# or you can redirect to other path with a notice
end
end
您可以查看here
如果您未在网址中传递user_id
参数,则必须更改routes.rb
,如:
resources :users do
resources :seasons
end
这将创建您的new
季节路线网址,如:root_url/users/1/seasons/new
答案 4 :(得分:0)
把'seasons /:user_id /:id'=&gt; 'home#update',: constraints =&gt; {user_id:User.where(admin:true).pluck(:id)}
发布'seasons /:user_id /:id'=&gt; 'home#create',: constraints =&gt; {user_id:User.where(admin:true).pluck(:id)}
资源:季节,除了:[:create,:update]
按照上面的说法更改您的route.rb文件。