Usando campos de um modelo de associação (has_many) com formata nos trilhos
-
25-09-2019 - |
Pergunta
Eu procurei e tentei muito, mas não posso conseguir isso como quero .. então aqui está o meu problema.
class Moving < ActiveRecord::Base
has_many :movingresources, :dependent => :destroy
has_many :resources, :through => :movingresources
end
class Movingresource < ActiveRecord::Base
belongs_to :moving
belongs_to :resource
end
class Resource < ActiveRecord::Base
has_many :movingresources
has_many :movings, :through => :movingresources
end
Movingresources
contém campos adicionais, como quantity
. Estamos trabalhando nas opiniões de 'Bill'. Graças ao formlastic para simplificar toda a coisa do relacionamento, apenas escrevendo
<%= form.input :workers, :as => :check_boxes %>
E eu recebo uma lista de seleção muito boa. Mas o que não descobri até agora é: como posso usar os campos adicionais do 'MovingResource', próximo ou em cada caixa de seleção meus campos desejados desse modelo?
Vi abordagens diferentes, principalmente com o loop manualmente através de uma matriz de objetos e criando os formulários apropriados, usando: para uma parte de um formulário.Inputs, ou não. Mas nenhuma dessas soluções estava limpa (por exemplo, funcionou para a visualização de edição, mas não para novos porque os objetos necessários não foram construídos ou gerados e gerá -los causando uma bagunça).
Eu quero saber suas soluções para isso!
Solução
Ok, eu perdi a revolução de aceita_nest_attributes_for, isso explica por que não está realmente funcionando.
Isso me deu um grande passo adiante, mas acho que em algum lugar ainda terei algumas complicações com minhas relações complexas ^_ ^
class Moving < ActiveRecord::Base
has_many :movingworkers, :dependent => :destroy
has_many :workers, :through => :movingworkers
accepts_nested_attributes_for :movingworkers
end
<% form.inputs :for => :movingworkers do |movingworker| %>
<%= movingworker.inputs :worker, :quantity %>
<% end %>
Outras dicas
FormTastic's: label_method opção pode ajudar. Por exemplo
<%= form.input :movingworkers, :label_method => :worker %>
ou
<%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>
Se os campos não existirem na nova visão, basta testar se for novo (novo recorde?) e apresentar um conjunto diferente de campos (se você envolver uma parte parcial, pode ser uma abordagem bastante limpa).