2016-09-16 7 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

부모를 저장할 때 중첩 된 특성에 대해 암시 적으로 save 메서드가 호출되지 않습니까? – user1185081