J'ai un modèleaccepts_nested_attributes_for ne générant pas de clé étrangère
class ServiceRequest < ActiveRecord::Base
has_many :services
accepts_nested_attributes_for :services
...
end
et l'enfant
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
et je crée à travers une forme comme ceci:
<% 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 %>
Les champs cachés sont peuplé à partir d'un formulaire sur une page à partir de laquelle celui-ci est dirigé. Tout cela fonctionne très bien. Ma méthode create est la suivante:
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
Tout est créé correctement dans la base de données. Cependant, les deux modèles ne sont pas liés par la clé étrangère. En d'autres termes, la clé étrangère n'est jamais définie dans le modèle enfant. Comment puis-je remédier à cela? J'ai vu certaines personnes dire que c'est un bug documenté, mais j'ai été incapable de trouver cela vrai n'importe où. Merci pour toute aide.
Note: 'belongs_to service_requests,: foreign_key => "wsi_web_inq_audits_uid_fk"' est où la relation FK pour la ServiceRequest et les types de services sont censés être connecter. Juste au cas où ce n'était pas clair de regarder le code. C'est la colonne qui ne se règle pas. – Lukas