将嵌套参数传递给构建方法的正确方法是什么? (Ruby 在 Rails 5 上)

Which is the right way to pass nested parameters to a build method ? (Ruby on Rails 5)

我正在构建一个非常简单的应用程序来管理用户和密钥。键是用户的嵌套属性。我受到 RailsCast #196 的启发。 模型定义为:

class User < ApplicationRecord
  #Validations
  ---  
  #Relations
  has_many :keys, :dependent => :destroy
  accepts_nested_attributes_for :keys, :reject_if => :all_blank, :allow_destroy => true
end

class Key < ApplicationRecord
  #Validations
  ---
  #Relations
  belongs_to :user
end

用户控制器包含强参数:

def user_params
  params.require(:user).permit(:nom, :prenom, :section, :email, :password, keys_attributes: [:id, :secteur, :clef])
end

我希望为每个新用户(用户控制器)初始化 1 个密钥:

# GET /users/new
def new
  @user = User.new
  key = @user.keys.build({secteur: "Tous", clef: "ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678"})
end

我尝试了很多方法来初始化用户密钥,但我不知道如何向它传递参数。始终创建用户,但不会创建第一个密钥。没有发出错误消息。

删除构建方法参数中的“{”标签。应该是:

key = @user.keys.new(secteur: "Tous", clef: "ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678")

此外,build 方法只是 'new' 的别名,并且在 rails 3 个应用程序上表现不同,所以我总是偏离它,只使用更熟悉的 'new' 方法。显然不要忘记在控制器中的某个时间点保存对象。