2014-01-27 1 views
1

저는 레일을 처음 사용하고 중첩 된 폼으로 어려움을 겪고 있습니다.레일 - 중첩 된 폼이 보이지 않습니다 - 다른 컨트롤러가없는 테이블을 채우십시오

나는 비즈니스를 사이트에 올리고 비즈니스 세부 정보를 단일 양식으로 등록하기 만하면됩니다. 데이터베이스 수준에서 필자는 주소 정보를 '비즈니스'테이블에서 분리하여 '사용자'가 시스템에 주소록을 가지고 있기 때문에 자체 '주소'테이블에 저장합니다.

양식보기는 다음과 같습니다

<div class= "panel-body"> 
    <%= form_for(@business) do |f| %> 

     <div class= "form-group"> 
    <%= f.label :Business_name %> 
    <%= f.text_field :name, :autofocus => true, class: "form-control" %> 
    </div> 

     <div class= "form-group"> 
     <%= f.label :Business_Email %> 
     <%= f.email_field :email, class: "form-control" %> 
     </div> 


     <div class= "form-group"> 
     <%= f.fields_for :addresses do |x| %> 
     <%= x.label :Street_Number %> 
     <%= x.text_field :number %> 
     <% end %> 
     </div> 

     <div class= "form-group"> 
      <%= f.submit "Register", class: "btn btn-primary" %> 
     </div> 
    <% end %> 
</div> 

을 나는 그것이 그러나 주소를 자신의 컨트롤러를 제공하기 위해 잔인한 것 같아 아무것도 렌더링 귀찮게 주소를 인스턴스화하는 것을 아무것도과 관련이있다 느낌이있다.

비즈니스 컨트롤러는 새 비즈니스를 등록하기위한 URL 인 'new'에 대해 이렇게 보입니다. 당신이 1 개 이상 주소를 갖고 싶어

class Address < ActiveRecord::Base 
    belongs_to :business 
end 

class Business < ActiveRecord::Base 
    has_many :addresses 
    accepts_nested_attributes_for :addresses 

답변

2

@business과 연결된 주소가 없으면 필드가 렌더링되지 않습니다.

컨트롤러에이 추가 :

GET /businesses/new 
def new 
    @business = Business.new 
    @business.addresses.build 
end 
+0

감사합니다! 그것은 단순한 것이 될 것이라는 것을 알았다. – Rj01

+0

아마 하나 이상의 비슷한 문제를 해결할 수 있습니다. "undefined method'build for 'nil : NilClass"오류가 발생했습니다. 폼에서 다른 중첩 된 폼에 대해이 작업을 수행 할 때 오류가 발생합니다. 위에서 제안한대로하고 있습니다. 이번에는 '주소'대신 '템플릿'을 사용합니다. 유일한 차이점은 비즈니스는 여러 관계 대신 하나의 템플리트 (템플리트 -> belongs_to business, business -> has_one 템플리트)를가집니다. 이 구문에서 다른 뭔가가 필요합니까? – Rj01

+0

매우 유사하게 작동하지만'has_one' 연관이므로'template.build'가 아닌'build_template'을 사용해야합니다. – BroiSatse

1

는 새로운 액션

def new 
    @business = Business.new 
    @business.addresses.new 
    end 

의 빈 주소 객체를 초기화 :

GET /businesses/new 
    def new 
    @business = Business.new 
    ***Do I need to add something here for address?*** 
    end 

나는 모델의 관계가 정확한지 확신 입력란, 할 수있다

2.times { @business.addresses.new } # This will initialize 2 address objects, which will be seen on the form