在我看过的大多数Rails应用程序中,控制器列出了提交属性时允许或不允许的属性。
class PersonsController < ApplicationController
# rest of code
def person_params
params.require(:person).permit(:name)
end
end
我们看不到类似
的内容# Hypothetical code only
class Person < ActiveRecord::Base
def my_param_whitelist
[:name]
end
end
即使在模型类中使用白名单似乎更加干燥。
具有白名单的控制器的理由是什么,而不是正在修改的模型?
答案 0 :(得分:2)
我从未在技术上考虑太多,但这是一个直觉答案。
如果你在模型中声明允许的参数,是的,这会使代码保持干燥,你不必在每个控制器中重复自己,但这意味着必须与模型通信的每一段代码都必须通过相同的白名单。
但是,如果将允许的参数保留在控制器中,则可以允许不同的控制器拥有自己的白名单。
例如,用户(UserController)可能无法更改他/她的注册用户名/电子邮件,但管理员(AdminController)可能能够这样做。在这种情况下,UserController和AdminController有自己的允许参数的白名单。