有没有办法重命名强参数键?

Chr*_*son 6 ruby-on-rails ruby-on-rails-3 strong-parameters ruby-on-rails-4

假设我在没有使用强参数的控制器中有代码

Model.create name: params[:name], alias_id: params[:foreign_id]
Run Code Online (Sandbox Code Playgroud)

我可以在这里使用强参数吗?

我不能做

Model.create params.require(:name, :foreign_id)
Run Code Online (Sandbox Code Playgroud)

因为foreign_id不是一个参数

我不能做

Model.create params.require(:name, :alias_id)
Run Code Online (Sandbox Code Playgroud)

因为alias_id不在模型上.

基本上,我想知道在使用强参数时是否可以使用参数键别名.

Tyr*_*son 12

通常如果我想以这种方式映射params(通常是由于一些外部API)我使用的alias_attribute方法ActiveRecord

因此,如果我有一些对我来说是{name: "bob", alias_id: 1234}理所当然的,我希望拥有它{name: "bob", foreign_id: 1234}

我在我的ActiveRecord模型中声明了以下内容

class MyModel < ActiveRecord::Base
  alias_attribute :alias_id, :foreign_id
end
Run Code Online (Sandbox Code Playgroud)

现在我的模型将始终识别alias_idforeign_id在任何上下文中的映射,我可以推送params.require(:name, :alias_id),我的模型将识别它并根据需要处理它,而不会在控制器中循环遍历属性.

如果你想在其他模型上也这样做,这也更简单.