Rails 3.2 - accepts_nested_attributes_for et de la vue formulaire ne s'affiche pas
-
13-12-2019 - |
Question
J'ai de modèles, L'utilisateur et Enseignant.
L'utilisateur
class User < ActiveRecord::Base
...
has_one :teacher
accepts_nested_attributes_for :teacher
end
Enseignant
class Teacher < ActiveRecord::Base
attr_accessible :teacher_last_name
belongs_to :user
...
end
J'ai aussi en forme contrôleurs/vues/admins/new_teacher.hmtl.erb
<%= form_for @user, :url => create_teacher_url, :html => {:class => "form-horizontal"} do |f| %>
<%= field_set_tag do %>
<% f.fields_for :teacher do |builder| %>
<div class="control-group">
<%= builder.label :teacher_last_name, "Last name", :class => "control-label" %>
<div class="controls">
<%= builder.text_field %>
</div>
</div>
<% end %>
<%= f.submit "Create", :class => "btn btn-large btn-success" %>
<% end %>
Admin contrôleur
class AdminsController < ApplicationController
def new_teacher
@user = User.new
@teacher = @user.build_teacher
end
end
Donc, j'ai 2 questions:
- Pourquoi mon formulaire n'apparaît pas?
- Est <%= builder.text_field %> correct?
La solution
J'ai trouvé une solution.C'est incroyable facile à réparer.Dans FieldS_Pur, vous devez utiliser <%= au lieu de <%.
Dans mon cas, ma vue ressemble maintenant à:
<%= form_for @user, :url => create_teacher_url, :html => {:class => "form-horizontal"} do |f| %>
<%= field_set_tag do %>
<%= f.fields_for :teacher do |builder| %>
<div class="control-group">
<%= builder.label :teacher_last_name, "Last name", :class => "control-label" %>
<div class="controls">
<%= builder.text_field :teacher_last_name %>
</div>
</div>
<% end %>
<%= f.submit "Create", :class => "btn btn-large btn-success" %>
<% end %>
Autres conseils
- Avez-vous construit un nouveau
teacher
objet de la forme à utiliser?- Vous assurer que vous avez quelque chose comme cela dans votre contrôleur:@user.build_teacher
- Non, vous devez fournir l'attribut que vous souhaitez utiliser,
builder.text_field :teacher_last_name
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow