Estoy revisando los documentos de la API de Rails collection_select
y son horribles.
El encabezado es este:
collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})
Y este es el único código de muestra que dan:
collection_select(:post, :author_id, Author.all, :id, :name_with_initial, :prompt => true)
¿Alguien puede explicar, usando una asociación simple (digamos User
has_many Plans
y a Plan
pertenece a a User
), qué quiero usar en la sintaxis y por qué?
Edición 1: Además, sería increíble si explicaras cómo funciona dentro de una form_helper
forma regular. Imagine que está explicando esto a un desarrollador web que comprende el desarrollo web, pero que es "relativamente nuevo" para Rails. ¿Cómo lo explicarías?
fuente
FormBuilder
sino enFormOptionsHelper
: api.rubyonrails.org/classes/ActionView/Helpers/…Respuestas:
O su ejemplo se puede representar como el siguiente código:
Esto no está documentado en el
FormBuilder
, pero en elFormOptionsHelper
fuente
He pasado bastante tiempo en las permutaciones de las etiquetas seleccionadas yo mismo.
collection_select
crea una etiqueta de selección de una colección de objetos. Teniendo esto en cuenta,object
: Nombre del objeto. Esto se usa para generar el nombre de la etiqueta, y se usa para generar el valor seleccionado. Este puede ser un objeto real o un símbolo; en este último caso, la variable de instancia de ese nombre se busca en el enlace deActionController
(es decir,:post
busca una instancia var llamada@post
en su controlador).method
: Nombre del método. Esto se utiliza para generar el nombre de la etiqueta. En otras palabras, el atributo del objeto que intenta obtener de la seleccióncollection
: La colección de objetosvalue_method
: Para cada objeto de la colección, este método se utiliza para el valortext_method
: Para cada objeto de la colección, este método se utiliza para mostrar textoParámetros opcionales
options
: Opciones que puedes pasar. Estos se documentan aquí , bajo el título Opciones.html_options
: Lo que se pasa aquí, simplemente se agrega a la etiqueta html generada. Si desea proporcionar una clase, id o cualquier otro atributo, va aquí.Su asociación podría escribirse como:
collection_select(:user, :plan_ids, Plan.all, :id, :name, {:prompt => true, :multiple=>true })
Con respecto al uso
form_for
, nuevamente en términos muy simples, para todas las etiquetas que vienen dentro deform_for
, por ejemplo.f.text_field
, no necesita proporcionar el primerobject
parámetro ( ). Esto se toma de laform_for
sintaxis.fuente