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ł?
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
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
.
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