2016-09-16 83 views
0

我正在构建一个管理用户和密钥的非常简单的应用程序。键是用户的嵌套属性。我受到RailsCast #196的启发。 这些模型被定义为:将嵌套参数传递给构建方法的正确方法是什么? (Ruby on Rails 5)

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 

我尝试了很多方法来初始化用户的密钥,但我无法弄清楚如何传递参数给它。用户总是被创建,但第一个键不是。没有错误信息发布。

+0

你可以做key = @ user.keys.build,然后在嵌套的表单中添加一个隐藏字段,其中包含一个生成随机密钥的方法的值。 – luissimo

回答

0

删除构建方法参数中的'{'标记。应该是:

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

此外,构建方法是只是一个别名“新”,并使用不同的行为在轨道3级的应用,因此我总是从它偏离了,只是用更熟悉的“新”方法。显然,不要忘记在控制器的某个位置保存对象。

+0

保存父级时不是隐式调用嵌套属性的保存方法吗? – user1185081

相关问题