rails form_with form_tag form_for ruby-on-rails controller form-for

ruby-on-rails - form_with - helpers rails



Sintaxis para enrutar los rieles form_for al controlador personalizado (1)

prueba esto

form_for(url: { controller: "posts", action: "create" }, html => { :class => "form" }, method: "post") do |f|

He intentado foros, documentación y sugerencias de blogs. Ellos convergen en la sintaxis que para mí no guarda apropiadamente Y enruta a través del controlador deseado.

Panorama general, tengo dos aplicaciones de software que comparten funcionalidad. Para implementar la funcionalidad compartida, hice que Rails generara Shared :: Widgets. Este MVC funciona bien. No hay problemas para ver, actualizar, crear o eliminar mediante el enrutamiento estándar compartido / widgets y etc.

Luego, para la funcionalidad específica del producto, creé dos controladores: Product1 :: Widgets y Product2 :: Widgets. Ambos heredan del controlador Shared :: Widgets. Ambos están vacíos, excepto por los diseños específicos del producto.

Este esquema casi funciona. Cuando dirijo a product1 / widgets, establece el diseño en product1 e invoca el método de índice de shared / widgets. El resultado es la visualización de shared / widgets / index.html.erb con el diseño de product1. De manera similar, cuando dirijo a product2 / widgets, esto establece el diseño de product2 e invoca el método de índice de shared / widgets. El resultado es la visualización de shared / widgets / index.html.erb con el diseño de product2. Perfecto.

Pero ahora llegamos a la form_for. Debido a que implementa la magia de los rieles, realmente realmente quiere encaminar directamente al controlador Shared :: Widgets. Pero eso no es lo que quiero. Quiero que dirija al controlador de producto apropiado para establecer el diseño. Los rieles generados form_for eran algo como esto:

form_for(@shared_widget, :html => { :class => "form"}) do |f|

Lo intenté:

form_for([:product1, @widget], :html => { :class => "form"}) do |f|

pero eso duplica el espacio de nombres (product1_widget_shared_widget_path).

Intenté los siguientes tres formatos, todos los cuales parecen encaminarse correctamente, y guardo el registro, pero el registro está vacío (las columnas están en blanco):

form_for(@widget, url => "product1/widget", :html => { :class => "form"}) do |f| form_for(@widget, url => url_for(:controller => "widget"), :html => { :class => "form"}) do |f| form_for(@widget, url => url_for(:controller => "widget", :action => "create"), :html => { :class => "form"}) do |f|

¿Alguna ayuda? Si el código anterior tiene errores de ortografía, se debe a la transcripción. El código real que utilicé pasó el intérprete. Gracias.