레일 4에 하나의 form_for에 여러 모델이있는 방법이 있습니까? 그것은 단지 하나의 레코드를 필요하기 때문에여러 개의 서로 다른 클래스 객체에 대해 양식을 작성 하시겠습니까?
어쩌면
# gives error
<%= form_for ([@user, @pet]), url: some_path do |u, p| %>
레일 4에 하나의 form_for에 여러 모델이있는 방법이 있습니까? 그것은 단지 하나의 레코드를 필요하기 때문에여러 개의 서로 다른 클래스 객체에 대해 양식을 작성 하시겠습니까?
어쩌면
# gives error
<%= form_for ([@user, @pet]), url: some_path do |u, p| %>
같은 그것은 form_for
도우미와 수 없습니다. [@user, @pet]
의 구문은 연관된 레코드의 올바른 경로를 작성하기위한 것입니다. 전달 된 배열의 마지막 요소 만 레코드로 사용됩니다. 기타는 올바른 경로를 만드는 데 사용됩니다.
"user/#{@user[:id]}/pet/#{@pet[:id]}" # when @pet is persisted
"user/#{@user[:id]}/pet/new" # if @pet = Pet.new
당신은 당신의 자신의 도우미 및 양식 빌더를 정의하거나 사용자 정의 템플릿보기를 쓸 수 있습니다 : 그래서, 당신의 예에서 사용자를 가정하고 결과 경로는 다음과 같이 다르게 표시 될, 하나 또는 여러 애완 동물과 @user
이 지속되고있다 여러 레코드를 수락합니다.
일반적으로 이와 비슷한 것은 두 모델의 연관성을 통해 수행됩니다. 어떤 경우 여기에서 몇 가지 가정을 취할 것입니다. 두 모델 user
및 pet
이 있다고 가정합니다. 내가 pet
은 user
에 속하고 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
경로는 무엇입니까? –