Aucune sortie via fields_for lors de l'utilisation d'une relation un à un
-
28-10-2019 - |
Question
J'ai eu du mal à essayer d'obtenir * fields_for * pour produire une sortie en essayant d'afficher mon modèle d'utilisateur et de profil sur un seul formulaire, ceux-ci utilisent une relation * has_one * et * appartient_to *.
Voici donc des extraits du haut des classes modèles:
class User < ActiveRecord::Base
has_one :profile
accepts_nested_attributes_for :profile
class Profile < ActiveRecord::Base
belongs_to :user
Le contrôleur est assez simple et standard:
def new
@user = User.new
end
def edit
@user = User.find(params[:id])
end
Et voici un extrait de la vue telle qu'elle se présente actuellement:
<%= form_for(@user) do |f| %>
<% f.fields_for :profile do |profile_form| %>
<div class="field">
<%= profile_form.label :name %><br />
<%= profile_form.text_field :name %>
</div>
<% end %>
<div class="field">
<%= f.label :email %><br />
<%= f.text_field :email %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
J'ai essayé d'autres choses, comme celle-ci:
<% fields_for @user.profile do |profile_form| %>
Et tout fonctionne bien si j'ajoute manuellement le champ:
<div class="field">
<label for="user_name">Name</label><br>
<input id="user_name" name="user[profile_attributes][name]" size="30" type="text" value="<%= @user.profile.name %>">
</div>
Il vaut la peine de mentionner que je suis assez nouveau dans les rails et que je ne sais pas exactement comment ces fonctions fonctionnent sous le capot, même si j'ai lu le documentation et guide . De plus, dans mes recherches, beaucoup d'exemples de champs_pour une relation un à plusieurs, alors peut-être que je m'y prends de la mauvaise manière?
Toute aide, conseil et lecture supplémentaire est très apprécié :-)
Salutations,
Sam
La solution
Dans votre code:
<% f.fields_for :profile do |profile_form| %>
Cela n'a-t-il pas besoin d'être écrit comme ceci (en raison du nouveau comportement de Rails 3):
<%= f.fields_for :profile do |profile_form| %>