2009-11-20 3 views
1

나는 모델accepts_nested_attributes_for하지 외래 키

class ServiceRequest < ActiveRecord::Base 
    has_many :services 
    accepts_nested_attributes_for :services 

    ... 
end 

와 아이

class Service < ActiveRecord::Base 
    belongs_to :service_category, :foreign_key => "wsi_web_serv_cats_uid_fk" 
    belongs_to :service_type, :foreign_key => "wsi_web_serv_types_uid_fk" 
    belongs_to :service_subtype, :foreign_key => "wsi_web_srv_subtypes_uid_fk" 
    belongs_to :service_requests, :foreign_key => "wsi_web_inq_audits_uid_fk" 
end 

와 너무 같은 양식을 통해 그것을 만드는 오전 있습니다

<% form_for(@request, :url => { :action => :create }) do |form| %> 
    <table> 
     <tr> 
      <td><font style="font-weight: bold" color="red">*</font><b>First Name</b></td> 
      <td><b>Middle Initial</b></td> 
      <td><font style="font-weight: bold" color="red">*</font><b>Last Name</b></td> 
     </tr> 
     <tr> 
      <td><%= form.text_field :first_name %></td> 
      <td><%= form.text_field :win_middle_init, :size => "2" %></td> 
      <td><%= form.text_field :last_name %></td> 
     </tr> 
     <tr> 
      <td colspan="2"> 
       <font style="font-weight: bold" color="red">*</font><b>Address 1</b><br/> 
       <%= form.text_field :address_1 %><br/> 
       <%= form.text_field :address_2 %> 
      </td> 
     </tr> 
     <tr> 
      <td><font style="font-weight: bold" color="red">*</font><b>City</b></td> 
      <td><font style="font-weight: bold" color="red">*</font><b>State</b></td> 
      <td><font style="font-weight: bold" color="red">*</font><b>Zip Code</b></td> 
     </tr> 
     <tr> 
      <td><%= form.text_field :municipality %></td> 
      <td><%= form.text_field :state, :size => "4" %></td> 
      <td><%= form.text_field :zip, :size => "9" %></td> 
     </tr> 
     <tr> 
      <td> 
       <font style="font-weight: bold" color="red">*</font><b>Phone Number</b><br/> 
       <%= form.text_field :day_phone %> 
      </td> 
     <tr/> 
     <tr> 
      <td> 
       <font style="font-weight: bold" color="red">*</font><b>Email</b><br/> 
       <%= form.text_field :email %> 
      </td> 
     <tr/> 
     <tr>    
      <td> 
       <font style="font-weight: bold" color="red">*</font><b>Confirm Email</b><br/> 
       <%= form.text_field :email_confirmation %> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <font style="font-weight: bold" color="red">*</font><b>Preferred Contact</b><br/> 
       <%= form.select "contact_method", options_for_select([["Phone", "PHN"], ["Email", "EML"], ["Phone or Email", "BTH"]]) %> 
      </td> 
     </tr> 
    </table> 

    <% form.fields_for :services do |fields| %> 
     <%= fields.hidden_field :wsi_web_serv_cats_uid_fk %> 
     <%= fields.hidden_field :wsi_web_serv_types_uid_fk %> 
     <%= fields.hidden_field :wsi_web_srv_subtypes_uid_fk %> 
    <% end %>   

    <p> 
     <%= form.submit "Create" %> 
    </p>    
<% end %> 

숨겨진 필드는 이 페이지의 양식에서 채워집니다. 이 모든 것이 잘 작동합니다. 내 작성 방법은 다음과 같습니다.

def create 
    service_request = ServiceRequest.new(params[:service_request]) 

    if service_request.save! 
     flash[:notice] = "Information submitted successfully. You will be contacted by a customer service representative regarding the services you selected." 
     redirect_to :controller => "customer", :action => "index" 
    else 
     flash[:notice] = "Error submitting info. Please try again." 
     redirect_to :back 
    end   
end 

모든 것이 데이터베이스에 정상적으로 생성됩니다. 그러나 두 모델은 외래 키로 연결되어 있지 않습니다. 즉, 외래 키는 자식 모델에 설정되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? 어떤 사람들은 이것이 문서화 된 버그라고 말한 적이 있습니다 만, 나는 이것이 어디서나 진실이라고 발견 할 수 없었습니다. 어떤 도움을 주셔서 감사합니다.

+0

노트'belongs_to : service_requests는, 상기 서비스 요청 및 서비스 유형에 대한 FK 관계가 연결되도록되어 어디 foreign_key =>는 "wsi_web_inq_audits_uid_fk은"'이다. 그 코드를 보아서는 분명치 않다. 이것은 설정되지 않는 열입니다. – Lukas

답변

2

ServiceRequest 클래스의 has_many에도 :foreign_key => "wsi_web_inq_audits_uid_fk"을 제공해야합니다. 사용 가능한 모든 has_many 매개 변수는 API Docs을 참조하십시오.

+0

은 모든 has_many 관계에 해당됩니까? 항상 둘 다 있어야합니까? – Lukas

+0

레일스가 지정되지 않은 경우 몇 가지 가정 사항이 있습니다. 예를 들어, 게시물 모델에 속한 댓글 모델이있는 경우 게시물 모델에 has_many : comments가 필요하고 Comment 모델에 belongs_to : post가 필요합니다. 레일즈는 사용자의 주석 테이블에있는 외래 키가 post_id 일 것으로 예상합니다. 항상 연관된 모델의 단일 단어를 가정합니다. – bensie

1

왜 복수형입니까?

class Service < ActiveRecord::Base 
    ... 
    belongs_to :service_requests, :foreign_key => "wsi_web_inq_audits_uid_fk" 
end 
+0

그래, 확실히 도움이되지 않을 것입니다 :) belongs_to : service_request .....해야합니다. – bensie