Estoy revisando los documentos de la API de Rails collection_selecty 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 Userhas_many Plansy a Planpertenece 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_helperforma 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

FormBuildersino 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 elFormOptionsHelperfuente
He pasado bastante tiempo en las permutaciones de las etiquetas seleccionadas yo mismo.
collection_selectcrea 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,:postbusca una instancia var llamada@posten 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 primerobjectparámetro ( ). Esto se toma de laform_forsintaxis.fuente