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

Était-ce utile?

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| %>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top