select_tag remote rails options_from_collection_for_select options_for_select name method form for collection ruby-on-rails ruby-on-rails-3

ruby on rails - remote - ¿Puede alguien explicar collection_select en términos claros y simples?



select in rails 5 (2)

Estoy revisando los documentos de API de Rails para 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 un User muchos Plans , y un Plan pertenece a un User ), lo que quiero usar en la sintaxis y por qué?

Edición 1: Además, sería increíble si explicaras cómo funciona dentro de form_helper o en una forma regular. Imagine que está explicando esto a un desarrollador web que entiende el desarrollo web, pero que es "relativamente nuevo" para Rails. ¿Cómo lo explicarías?


He pasado bastante tiempo con las permutaciones de las etiquetas de selección.

collection_select crea una etiqueta de selección de una colección de objetos. Teniendo esto en mente,

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 del ActionController (es decir @post :post busca una var de instancia llamada @post en su controlador).

method : nombre del método. Esto se usa para generar el nombre de la etiqueta. En otras palabras, el atributo del objeto que está tratando de obtener de la selección

collection : la colección de objetos

value_method : para cada objeto en la colección, este método se usa para valor

text_method : para cada objeto en la colección, este método se usa para mostrar texto

Parámetros opcionales:

options : opciones que puede pasar. Estos están documentados here , bajo el encabezado Opciones.

html_options : lo que se pase aquí, simplemente se agrega a la etiqueta html generada. Si desea proporcionar una clase, un id o cualquier otro atributo, aquí va.

Su asociación podría escribirse como:

collection_select(:user, :plan_ids, Plan.all, :id, :name, {:prompt => true, :multiple=>true })

Con respecto al uso de form_for , nuevamente en términos muy simples, para todas las etiquetas que vienen dentro de form_for , por ej. f.text_field , no necesita proporcionar el primer parámetro ( object ). Esto se toma de la sintaxis de form_for .


collection_select( :post, # field namespace :author_id, # field name # result of these two params will be: <select name="post[author_id]">... # then you should specify some collection or array of rows. # It can be Author.where(..).order(..) or something like that. # In your example it is: Author.all, # then you should specify methods for generating options :id, # this is name of method that will be called for every row, result will be set as key :name_with_initial, # this is name of method that will be called for every row, result will be set as value # as a result, every option will be generated by the following rule: # <option value=#{author.id}>#{author.name_with_initial}</option> # ''author'' is an element in the collection or array :prompt => true # then you can specify some params. You can find them in the docs. )

O su ejemplo puede representarse como el siguiente código:

<select name="post[author_id]"> <% Author.all.each do |author| %> <option value="<%= author.id %>"><%= author.name_with_initial %></option> <% end %> </select>

Esto no está documentado en FormBuilder , sino en api.rubyonrails.org/classes/ActionView/Helpers/…