Alguém pode explicar collection_select para mim em termos claros e simples?

Eu estou passando pelos documentos da API do Rails para collection_select e eles são horríveis.

O título é este:

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

E esse é o único código de exemplo que eles fornecem:

collection_select(:post, :author_id, Author.all, :id, :name_with_initial, :prompt => true)

Alguém pode explicar, usando uma associação simples (digamos, um User has_many Plans , e um Plan pertence a um User ), o que eu quero usar na syntax e por quê?

Edit 1: Além disso, seria fantástico se você explicasse como funciona dentro de um form_helper ou de um formulário regular. Imagine que você está explicando isso para um desenvolvedor da Web que entende o desenvolvimento da Web, mas é “relativamente novo” para o Rails. Como você explicaria isso?

 collection_select( :post, # field namespace :author_id, # field name # result of these two params will be:  

Ou o seu exemplo pode ser representado como o seguinte código:

  

Isso não está documentado no FormBuilder , mas no FormOptionsHelper

Passei bastante tempo nas permutações das tags selecionadas.

collection_select cria uma tag de seleção de uma coleção de objects. Mantendo isso em mente,

object : nome do object. Isso é usado para gerar o nome da tag e é usado para gerar o valor selecionado. Este pode ser um object real, ou um símbolo – no último caso, a variável de instância desse nome é procurada na binding do ActionController (isto é :post procura por uma instância var chamada @post no seu controller).

method : nome do método. Isso é usado para gerar o nome da tag. Em outras palavras, o atributo do object que você está tentando obter do select

collection : A coleção de objects

value_method : para cada object na coleção, esse método é usado para valor

text_method : Para cada object na coleção, esse método é usado para exibir texto

parameters opcionais:

options : Opções que você pode passar. Estes são documentados aqui , sob o título Opções.

html_options : O que quer que seja passado aqui, é simplesmente adicionado à tag html gerada. Se você quiser fornecer uma class, um id ou qualquer outro atributo, ele será exibido aqui.

Sua associação pode ser escrita como:

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

No que diz respeito ao uso de form_for , novamente em termos muito simples, para todas as tags que vêm dentro do form_for , por exemplo. f.text_field , você não precisa fornecer o primeiro parâmetro ( object ). Isso é retirado da syntax form_for .