Pregunta

Busco un ejemplo de cómo crear un constructor de forma personalizada para una lista de botones de radio con destino a un objeto que acts_as_tree. Ya tengo el código que muestra la lista de botones de radio, pero quiero que se seque por refactorización en un FormBuilder. No puedo encontrar ningún ejemplo de un constructor de formulario personalizado para las listas de botones de radio.

Cualquier punteros / enlaces sería apreciada.

¿Fue útil?

Solución

Si se asume que está llamando form_for en este modelo a menudo de muchos puntos de vista diferentes y cada forma va a tener el mismo conjunto de botones de radio. Hay algunas rutas que puede tomar aquí. Sin embargo, no puedo decir si estás preguntando cómo agregar automáticamente la lista de botones de radio o simplemente condensarlo.

La adición de la lista de botones de radio de forma automática requiere un poco más de conocimiento de las partes internas ActionView de lo que puedo compartir. Esencialmente, usted querrá averiguar cómo se generan las cosas y reemplazar el método fields_for en ActionView :: :: Ayudantes FormHelper al trabajo a la perfección. Desafortunadamente FormBuilders no funcionan de esa manera. Así que va a ser mucho más problemas de lo que vale.

Un mejor enfoque es crear un método que genera todos los botones de radio en el formulario personalizado constructor. Para simplificar las cosas en el caso de un cambio, vamos a añadir una constante al modelo. He decidido arbitrariamente que será un hash, donde cada tecla es un método de atributo que desea representar con una lista de botones de radio en las formas, y cada valor es una lista de valores aceptables para ese atributo. Esto hace que sea sencillo para generar múltiples listas de botones de radio sin tener que cambiar la forma constructor. PD También puede utilizar el hash para validar el contenido de cualquier atributo asociado con botones de radio.

/app/models/example.rb

class Example < ActiveRecord::Base
  ...
  RADIO_BUTTON_HASH = {
    :attribute_a => [:accepted_value_a1, :accepted_value_a2, :accepted_value_a3],
    :attribute_b => [:accepted_value_b1, :accepted_value_b2],
    ...
  }


   def self.radio_buttons_sort(a,b)
     # sort method to ensure that multiple radio buttons lists appear in the order you want
   end

   def self.radio_buttons_sorted
     RADIO_BUTTON_HASH.sort{|a,b| radio_button_sort(a,b)}
   end
   ...
end

He añadido un par de métodos de conveniencia, además del hash, no son necesarias, pero proporcionan un método más limpio de la estandarización de la producción.

** / app / helpers / example_helper.rb     módulo ExampleHelper

  # the custom FormBuilder
  class ExampleFormBuilder < ActionView::Helpers::FormBuilder    

    # add onkeypress and set maxlength of field to 3 to all text fields
    def radio_button_list(options={})
      Example.sorted_radio_buttons.each do |method,values|
        values.each do |value|
          radio_button(method, value, options)
        end
      end
    end

  end
end

A continuación, a partir de una vista donde se incluye ExampleHelper (hecho por defecto en cualquier vista prestados por el controlador Ejemplo).

<%form_for @example, :builder => ExampleFormBuilder do |f| %>
  ...

  <%=f.radio_button_list %>
<%end%>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top