2013-10-05 2 views

답변

1

같은 그것은 form_for 도우미와 수 없습니다. [@user, @pet]의 구문은 연관된 레코드의 올바른 경로를 작성하기위한 것입니다. 전달 된 배열의 마지막 요소 만 레코드로 사용됩니다. 기타는 올바른 경로를 만드는 데 사용됩니다.

"user/#{@user[:id]}/pet/#{@pet[:id]}" # when @pet is persisted 
"user/#{@user[:id]}/pet/new" # if @pet = Pet.new 

당신은 당신의 자신의 도우미 및 양식 빌더를 정의하거나 사용자 정의 템플릿보기를 쓸 수 있습니다 : 그래서, 당신의 예에서 사용자를 가정하고 결과 경로는 다음과 같이 다르게 표시 될, 하나 또는 여러 애완 동물과 @user이 지속되고있다 여러 레코드를 수락합니다.

3

일반적으로 이와 비슷한 것은 두 모델의 연관성을 통해 수행됩니다. 어떤 경우 여기에서 몇 가지 가정을 취할 것입니다. 두 모델 userpet이 있다고 가정합니다. 내가 petuser에 속하고 user은 많은 pets을 가질 수 있다고 가정합니다. 이러한 종류의 연관을 사용하면 pet 모델에는 사용자가 해당 애완 동물과 연결될 user_id 속성이 있습니다.

사용자 모델

attr_accessible :name, :pets_attributes 
has_many :pets 
accepts_nested_attributes_for :pets 

애완 동물 모델

attr_accesible :user_id, :name 
belongs_to :user 

는 개인적으로, 나는 그것이 멋진 연결 기능이 있습니다로 simple_form를 사용의 큰 팬이다.

보기

<% simple_form_for @user do |f| %> 
    <%= f.input :name %> 
    <%= f.simple_fields_for :pets do |p| %> 
    <% p.input :name %> 
    <% end %> 
<% end %> 

컨트롤러 컨트롤러 내에서

는, (이것은 new 행동이라고 가정 할 것). 이것은 사용자를위한 선을 만들고 애완 동물을위한 3 개의 반점을 세울 것이다.

def new 
    @user = User.new 
    3.times do 
    @user.pets.build 
    end 
end 

경로는 경로로 고려할 수

한 가지는 다음과 유사한을 설정하는 것입니다. 애완 동물 쇼 행동은 사용자에게도 알려지기 때문에 경로가 좀 더 예뻐집니다. /users/:user_id/pets/:pet_id

resources :users do 
    resources :pets 
end 
관련 문제