Przeglądam dokumentację Rails API dla collection_select
i są one okropne.
Nagłówek jest taki:
collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})
A to jedyny przykładowy kod, jaki podają:
collection_select(:post, :author_id, Author.all, :id, :name_with_initial, :prompt => true)
Czy ktoś może wyjaśnić za pomocą prostego skojarzenia (powiedzmy User
has_many Plans
, a a Plan
należy do a User
), czego chcę użyć w składni i dlaczego?
Edycja 1: Byłoby wspaniale, gdybyś wyjaśnił, jak to działa w form_helper
zwykłym formularzu. Wyobraź sobie, że wyjaśniasz to twórcy stron internetowych, który rozumie tworzenie stron internetowych, ale jest „stosunkowo nowy” w Railsach. Jak byś to wyjaśnił?
ruby-on-rails
ruby-on-rails-3
marcamillion
źródło
źródło
FormBuilder
ale wFormOptionsHelper
: api.rubyonrails.org/classes/ActionView/Helpers/ ...Odpowiedzi:
Lub Twój przykład może być przedstawiony jako następujący kod:
Nie jest to udokumentowane w
FormBuilder
, ale wFormOptionsHelper
źródło
Sam spędziłem trochę czasu nad permutacjami wybranych tagów.
collection_select
tworzy znacznik wyboru z kolekcji obiektów. Mając to na uwadze,object
: Nazwa obiektu. Służy do generowania nazwy tagu i służy do generowania wybranej wartości. Może to być rzeczywisty obiekt lub symbol - w tym drugim przypadku zmienna instancji o tej nazwie jest wyszukiwana w powiązaniu elementuActionController
(to znaczy:post
szuka instancji var wywołanej@post
w kontrolerze).method
: Nazwa metody. Służy do generowania nazwy tagu. Innymi słowy, atrybut obiektu, który próbujesz uzyskać z zaznaczeniacollection
: Zbiór obiektówvalue_method
: Dla każdego obiektu w kolekcji ta metoda jest używana jako wartośćtext_method
: Ta metoda jest używana do wyświetlania tekstu dla każdego obiektu w kolekcjiParametry opcjonalne:
options
: Opcje, które możesz przejść. Są one udokumentowane tutaj , pod nagłówkiem Opcje.html_options
: Cokolwiek jest tu przekazywane, jest po prostu dodawane do wygenerowanego tagu html. Jeśli chcesz podać klasę, identyfikator lub inny atrybut, przejdź tutaj.Twoje skojarzenie można zapisać jako:
collection_select(:user, :plan_ids, Plan.all, :id, :name, {:prompt => true, :multiple=>true })
Jeśli chodzi o używanie
form_for
, znowu w bardzo prosty sposób, dla wszystkich tagów, które znajdują się wform_for
, np.f.text_field
, nie musisz podawać pierwszegoobject
parametru ( ). Jest to zaczerpnięte zeform_for
składni.źródło