formulário de modelo aninhado e atualização_attributes
-
27-09-2019 - |
Pergunta
Eu tenho um formulário de modelo aninhado com um relacionamento um para muitos entre um projeto de classe e o membro da equipe de classe e, no controlador, uma função de atualização como:
@project = Project.find(params[:id])
@project.update_attributes(params[:project])
Agora, eu gostaria de definir alguns campos que não estão definidos no formulário para alguns membros da equipe antes que a economia aconteça. Não posso usar a função update_attributes como é fazê -lo.
Qual seria a melhor maneira de fazer isso?
Obrigado, Nicolas.
Solução
Eu olharia para o accepts_nested_attributes_for
função. Você pode ter algo como:
class Project < ActiveRecord::Base
has_one :team
accepts_nested_attributes_for :team
# also this will be useful
validates_associated :team
end
Em suas formas, você deseja usar o fields_for
Método para aninhar seus atributos. Isso pode parecer algo como:
<% 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 %>
Quando você enviar o formulário, você poderá ligar @project.update_attributes(params[:project])
E vai funcionar. Você também pode raise params.inspect
Para ver como os parâmetros estão aninhados.
Espero que isto ajude.