sous forme de modèle imbriqué et update_attributes
-
27-09-2019 - |
Question
J'ai un formulaire modèle imbriqué avec un à plusieurs entre une classe de projet et d'équipe de classe, et dans le contrôleur, une fonction de mise à jour comme:
@project = Project.find(params[:id])
@project.update_attributes(params[:project])
Maintenant, je voudrais définir certains champs qui ne figurent pas sous la forme de quelques-uns des membres de l'équipe avant l'économie se produit. Je ne peux pas utiliser les update_attributes fonctionnent comme est de le faire.
Quelle serait la meilleure façon de le faire?
Merci, Nicolas.
La solution
je regarderais dans la fonction accepts_nested_attributes_for
. Vous pourriez avoir quelque chose comme:
class Project < ActiveRecord::Base
has_one :team
accepts_nested_attributes_for :team
# also this will be useful
validates_associated :team
end
Dans vos formulaires vous voulez utiliser la méthode fields_for
pour nicher vos attributs. Cela pourrait ressembler à quelque chose comme:
<% form_for(@project) do |p| %>
<%= p.error_messages %>
<!-- Project name -->
<%= p.text_field :name %>
<% f.fields_for(@project.team) do |t| %>
<!-- Team Name -->
<%= t.text_field :name %>
<% end %>
<%= f.submit 'Create Project' %>
<% end %>
Lorsque vous soumettez le formulaire que vous pourrez appeler @project.update_attributes(params[:project])
et cela fonctionnera. Vous pouvez également raise params.inspect
de voir comment les params sont imbriqués.
Hope this helps.