1

考虑一个用户模型

# app/models/user.rb
class User
   enum status: [:sad, :bored, :happy]
end

在控制器中,我想接收params[:status]并返回具有该状态的所有用户

IE

# app/controllers/users_controller.rb
class UsersController << ApplicationController
   def index_status
      status = "#{params[:status]}"
      if User.statuses.include? status
         @status = status.to_sym
         @countries = User.send(@status)
      else
        redirect_to root_path, notice: 'Invalid status'
    end
end

这很好用,但Brakeman给了我一条dangerous send - User controlled method execution 警告

@countries = User.send(@status)

有没有办法做到这一点,不会招致来自Brakeman.

4

2 回答 2

1

ActiveRecord::Enum 文档...

当然,如果范围不符合您的需求,您也可以直接查询它们:

@countries = User.where(status: @status)

请注意:

status = "#{params[:status]}"

最好写成对#to_s.

status = params[:status].to_s

但根本没有必要对其进行字符串化。

status = params[:status]
于 2020-07-09T06:56:08.617 回答
0

根据@Justin 的评论,这是因为 Brakeman 不理解枚举。我为 Brakeman 打开了一个新问题,并在解决后更新此答案。

于 2020-07-10T03:52:44.997 回答