将嵌套参数传递给构建方法的正确方法是什么? (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' 方法。显然不要忘记在控制器中的某个时间点保存对象。
我正在构建一个非常简单的应用程序来管理用户和密钥。键是用户的嵌套属性。我受到 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' 方法。显然不要忘记在控制器中的某个时间点保存对象。