El uso de campos de un modelo de asociación (has_many) con Formtastic en carriles
-
25-09-2019 - |
Pregunta
Me buscó y trató mucho, pero no puedo lograrlo ya que quiero .. así que aquí está mi 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
contiene campos adicionales, como quantity
. Estamos trabajando en las vistas para 'factura'. Gracias a Formtastic para simplificar todo el asunto relación con sólo escribir
<%= form.input :workers, :as => :check_boxes %>
y me da una verdadera lista de casilla agradable. Pero lo que no he encontrado hasta ahora es: ¿Cómo puedo usar los campos adicionales de 'movingresource', al lado o debajo de cada casilla mis campos deseados de ese modelo
?vi diferentes enfoques, principalmente con bucle manualmente a través de una matriz de objetos y la creación de las formas apropiadas, usando: para en una parte form.inputs, o no. Pero ninguna de esas soluciones estaban limpios (por ejemplo trabajado para la vista de edición pero no para la nueva porque los objetos requeridos no se construyeron o se generan y la generación de ellos causó un desastre).
Quiero saber sus soluciones para esto!
Solución
De acuerdo, se perdió la revolución de accepts_nested_attributes_for, esto explica por qué no es realmente de trabajo.
Esto me consiguió un gran paso adelante, pero creo que en algún lugar todavía voy a tener algunas complicaciones con mis relaciones complejas ^ _ ^
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 %>
Otros consejos
de Formtastic: label_method opción podría ayudar. Por ejemplo.
<%= form.input :movingworkers, :label_method => :worker %>
o
<%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>
Si no existen los campos en el nuevo punto de vista, se puede simplemente prueba si es nuevo ( new_record? ) y presentar un conjunto diferente de los campos (si es que se coloca en un parcial en la lata ser un enfoque bastante limpio).