如何从Rails中的Model访问强参数4

时间:2016-02-24 12:00:51

标签: ruby ruby-on-rails-4 strong-parameters

假设我有一个strong_parameters的客户控制器,如下所示:

def update
  @customer.update_attributes(customer_params)
end

private

def customer_params
  params.require(:customer).permit(:name, :age)
end

现在我想从Customer模型访问允许的参数(名称和年龄)。例如:

class Customer < ActiveRecord::Base
  def self.some_method
    allowed_parameters = customer_params
  end
end  

如何访问这些参数?如何从客户模型中获取allowed_parameters = customer_params

1 个答案:

答案 0 :(得分:3)

你的问题很不寻常。允许的属性通常不属于模型。它们是控制器关注点,因此Rails删除了attr_accessible以支持strong_parameters。如果您需要保护属性,ActiveRecord有attr_read_only

如果您想要一个中心位置来保留它们,只需在模型中添加一个常量。

class Customer
  ALLOWED_ATTRIBUTES = [:name, :role]

  def allowed_attributes
    ALLOWED_ATTRIBUTES
  end
end

现在你可以从任何地方User.allowed_attributes开始。

private

def customer_params
  params.require(:customer).permit(*User.allowed_attributes)
end

但在我看来这是不可取的,因为允许的属性应该在某些上下文中设置,比如用户角色或访问级别等......