使用常量在控制器中存储列名称以存储参数?
问题:此实施是否存在安全风险或其他问题? 我这样做的原因是因为我不想为每个表单输入键入f.text_field :field_name
。 这似乎是最干的方法。 主要关注点 :常量是否未得到执行,并且想知道这种实现是否存在安全风险?
class UserController < ApplicationController def index end def new @user = User.new @fields = USER_FIELDS end def create render text: params.inspect end private USER_FIELDS = ["first_name", "last_name", "email", "password"] def require_parmas params.require(:user).permit(USER_FIELDS) end end
用户#new view
您可能希望冻结常量,以便任何其他代码都无法更改该值。 这应该满足您的安全问题。
USER_FIELDS = ["first_name", "last_name", "email", "password"].freeze
否则,这是一种公平的方法。 我唯一不同的是我将USER_FIELDS
常量移动到User模型,因为这更像是在“业务逻辑”域中。 然后继续直接访问常量,而不是@fields
它存储在@fields
实例变量中。 (另外,如果您采用这种方法,或者您将无法访问它,请不要将常量标记为私有。)
<% User::USER_FIELDS.each do |field| %> # ... <% end %>