Czy może mi ktoś wyjaśnić collection select w jasnych, prostych słowach?

Przeglądam dokumenty Rails API dla collection_select i są okropne.

Nagłówek jest taki:

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

I jest to jedyny przykładowy kod, który podali:

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

Czy ktoś może wyjaśnić, używając prostego skojarzenia (powiedzmy a User has_many Plans i a Plan należy do a User), Czego chcę użyć w składni i dlaczego?

Edit 1: również byłoby super, gdybyś wyjaśnił, jak to działa wewnątrz form_helper lub zwykłego formularza. Imagine you wyjaśniają to programiście, który rozumie tworzenie stron internetowych, ale jest "stosunkowo nowy" dla Rails. Jak byś to wytłumaczył?

Author: hopper, 2012-01-18

2 answers

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.
)

Lub twój przykład może być przedstawiony jako następujący kod:

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

Nie jest to udokumentowane w FormBuilder, ale w FormOptionsHelper

 255
Author: alexkv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-27 16:07:07

Sam spędziłem trochę czasu nad permutacjami znaczników select.

collection_select tworzy znacznik select z kolekcji obiektów. Pamiętając o tym,

object : Nazwa obiektu. Służy do wygenerowania nazwy znacznika i służy do wygenerowania wybranej wartości. Może to być rzeczywisty obiekt lub symbol - w tym drugim przypadku zmienna instancji o tej nazwie jest szukana w powiązaniu z ActionController (oznacza to, że :post szuka instancji var wywołane @post w kontrolerze.)

method : Nazwa metody. Służy do generowania nazwy tagu.. Innymi słowy, atrybut obiektu, który próbujesz uzyskać z select

collection : zbiór obiektów

value_method : dla każdego obiektu w kolekcji metoda ta zostanie zastosowana do wartości

text_method : dla każdego obiektu w kolekcji metoda ta jest wykorzystywana do wyświetlenia tekstu

Parametry Opcjonalne:

options : opcje, które możesz spasować. Są one udokumentowane tutaj , pod nagłówkiem opcje.

html_options : cokolwiek jest przekazywane tutaj, jest po prostu dodawane do wygenerowanego znacznika html. Jeśli chcesz podać klasę, id lub jakikolwiek inny atrybut, przejdź tutaj.

Twoje skojarzenie może być napisane jako:

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

W odniesieniu do używania form_for, ponownie w bardzo prostych słowach, dla wszystkich tagów, które wchodzą w skład form_for, np. f.text_field, nie musisz podawać pierwszego parametru (object). To pochodzi ze składni form_for.

 17
Author: zsquare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-26 13:50:17