Estou analisando os documentos da API do Rails collection_select
e eles são horríveis.
O cabeçalho é o seguinte:
collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})
E este é 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 User
), o que eu quero usar na sintaxe e por quê?
Edit 1: Além disso, seria incrível se você explicasse como funciona dentro de um form_helper
formulário ou em um formulário regular. Imagine que você está explicando isso a um desenvolvedor web que entende de desenvolvimento web, mas é "relativamente novo" para o Rails. Como você explicaria isso?
fonte
FormBuilder
mas noFormOptionsHelper
: api.rubyonrails.org/classes/ActionView/Helpers/...Respostas:
Ou seu exemplo pode ser representado como o seguinte código:
Isso não está documentado no
FormBuilder
, mas noFormOptionsHelper
fonte
Passei bastante tempo nas permutações das tags de seleção.
collection_select
cria uma tag de seleção de uma coleção de objetos. Mantendo isso em mente,object
: Nome do objeto. Isso é usado para gerar o nome da tag e para gerar o valor selecionado. Pode ser um objeto real ou um símbolo - neste último caso, a variável de instância com esse nome é procurada na ligação doActionController
(ou seja,:post
procura por uma instância var chamada@post
no seu controlador).method
: Nome do método. Isso é usado para gerar o nome da tag. Em outras palavras, o atributo do objeto que você está tentando obter da seleçãocollection
: A coleção de objetosvalue_method
: Para cada objeto na coleção, esse método é usado para o valortext_method
: Para cada objeto da coleção, esse método é usado para exibir textoParâmetros opcionais:
options
: Opções que você pode passar. Eles estão documentados aqui , sob o título Opções.html_options
: O que for passado aqui, é simplesmente adicionado à tag html gerada. Se você deseja fornecer uma classe, 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
form_for
, novamente em termos muito simples, para todas as tags que vêm dentro doform_for
, por exemplo.f.text_field
, você não precisa fornecer o primeiroobject
parâmetro ( ). Isso é retirado daform_for
sintaxe.fonte