2011-01-14 6 views
0

에 아이 모델의 자연 키를 받아들이는 방법은 다음과 같은 코드가 있습니다레일 3 : 상위 모델 양식

# app/models/part.rb 
class Part < ActiveRecord::Base 
    has_many :lots 
    # attributes: id, number 
end 

#app/models/lot.rb 
class Lot < ActiveRecord::Base 
    belongs_to :part 
    # attributes: id, number, part_id, quantity 
end 

# app/views/lots/_form.html.erb 
... 
<p> 
    <%= f.label :number %><br /> 
    <%= f.text_field :number %> 
</p> 
<p> 
    <% f.fields_for :part do |p| %> 
    <%= p.label :number, 'Part' %><br /> 
    <%= p.text_field :number %> 
    <% end %> 
</p> 
<p> 
    <%= f.label :quantity %><br /> 
    <%= f.text_field :quantity %> 
</p> 
... 

이 양식을 편집하거나 많이 생성하도록되어 있습니다. 양식은 기존 파트의 파트 번호를 승인하고 part_id를 로트에 저장하는 것입니다. fields_for 그룹이 나를 렌더링하지 않습니다. 나는 이것이 쉽다라고 확신한다. 여기서는 부품 번호가 자연스러운 키이지만 레일스는 대리 키를 사용합니다. 선택 목록을 사용할 수는 있었지만 키보드 입력을 받아 들일 필요가 있습니다. 결국 양식에 아약스를 연결해야합니다. 당신의 생각은 무엇입니까?

답변

0

당신에게없는 게은 도우미가 보통이 아니라 직접 출력하기보다, 값을 반환, 레일 3에서

<%= f.fields_for :part do |p| %>

서명 같습니다. 이 때문에 < % = 대신 < %

+0

을 사용하십시오. 파트 번호를 기반으로 파트를 찾고이를 로트 모델에 지정한 다음 저장해야합니까? 아니면 암묵적으로이 작업을 수행하기 위해 모델을 꾸미는 무언가가 있습니까? <% = 태그가 나타나기 위해 필드에 대해 작업했지만 폼을 게시 할 때 ActiveRecord :: AssociationTypeMismatch 오류가 발생합니다. –

+0

별도의 질문을 게시하고 컨트롤러 논리뿐만 아니라 config/routes.rb의 관련 경로를 포함 할 수 있습니까? –

+0

지금은 스캐 폴딩 코드입니다. 이 질문을 다시 게시하면 stackoverflow가 어떻게 작동해야하는지에 대한 제프의 감정을 상하게 할 것이라고 생각합니다. 질문의 원래 단락은 내가 여기서하려고하는 것을 암시해야합니다. 위 코드를 통해 내가 무엇을하고 있는지를 보여줄 수 있으며 중첩 된 필드를 연결하는 전반적인 개념을 이해하려고합니다. –