74

我正在使用 Rails 4 强参数构建一个 Web 应用程序。

在构建管理员后台控制器时,我想知道允许所有模型属性的最佳方法是什么?

现在,我写了这个:

def user_params 
  params.require(:user).permit(User.fields.keys)
end

你想到更好的方法了吗?

4

4 回答 4

148

您可以调用 bang 版本的 permit。

params.require(:user).permit!

Github 上的强参数自述文件

源代码供参考:

def permit!
  each_pair do |key, value|
    convert_hashes_to_parameters(key, value)
    self[key].permit! if self[key].respond_to? :permit!
  end

  @permitted = true
  self
end
于 2012-12-26T11:09:30.787 回答
12

以防万一有人需要 Rails 6,甚至没有链接到控制器的模型,您可以使用:

before_action :accept_all_params

private

def accept_all_params
  params.permit!
end

完成了,现在您可以随心所欲地玩了!

于 2020-01-14T21:23:31.707 回答
1

Skull0inc 的答案有效,但您可能想要删除created_atand updated_at。强参数的目的是仅列出您希望控制器更新的属性。就像是...

def user_params
  params.require(:user).permit(User.column_names - ["created_at", "updated_at"])
end
于 2019-03-07T21:51:15.333 回答
0

这行得通吗?

def user_params 
  params.require(:user).permit(User.column_names)
end
于 2018-09-13T15:19:32.860 回答