根据数据库参数限制ruby路由

时间:2016-08-01 03:44:09

标签: ruby-on-rails ruby

我有一个具有管理员字段的用户模型。这是布尔值。如果admin字段等于true,我只想让用户创建/修改/更新“Season”。我怎么会在铁轨上这样做呢?我把这个逻辑放在“季节”控制器中吗?与我的路线配置有什么关系?

5 个答案:

答案 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

Action Controller Docs: filters

答案 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文件。