Я просматриваю документы по Rails API, collection_select
и они ужасны.
Заголовок это:
collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})
И это единственный пример кода, который они дают:
collection_select(:post, :author_id, Author.all, :id, :name_with_initial, :prompt => true)
Может кто-нибудь объяснить, используя простую связь (скажем, User
has_many Plans
и a Plan
принадлежит a User
), что я хочу использовать в синтаксисе и почему?
Изменить 1: Также было бы здорово, если бы вы объяснили, как это работает внутри form_helper
или в обычной форме. Представьте, что вы объясняете это веб-разработчику, который понимает веб-разработку, но является «относительно новым» для Rails. Как бы вы это объяснили?
ruby-on-rails
ruby-on-rails-3
marcamillion
источник
источник
FormBuilder
а вFormOptionsHelper
: api.rubyonrails.org/classes/ActionView/Helpers/…Ответы:
Или ваш пример может быть представлен в виде следующего кода:
Это не задокументировано в
FormBuilder
, но вFormOptionsHelper
источник
Я потратил довольно много времени на перестановку тегов select самостоятельно.
collection_select
создает тег выбора из коллекции объектов. Имея это в виду,object
: Название объекта. Это используется для генерации имени тега и для генерации выбранного значения. Это может быть реальный объект или символ - в последнем случае переменная экземпляра с таким именем ищется в привязкеActionController
(то есть:post
ищет экземпляр var, вызываемый@post
в вашем контроллере).method
: Название метода. Это используется для генерации имени тега. Другими словами, атрибут объекта, который вы пытаетесь получить из выбораcollection
: Коллекция предметовvalue_method
: Для каждого объекта в коллекции этот метод используется для значенияtext_method
: Для каждого объекта в коллекции этот метод используется для отображения текстаНеобязательные параметры:
options
: Параметры, которые вы можете передать. Они задокументированы здесь , под заголовком Опции.html_options
Все, что здесь передано, просто добавляется в сгенерированный тег HTML. Если вы хотите указать класс, идентификатор или любой другой атрибут, он идет сюда.Ваша ассоциация может быть записана как:
collection_select(:user, :plan_ids, Plan.all, :id, :name, {:prompt => true, :multiple=>true })
Что касается использования
form_for
, опять же в очень простых терминах, для всех тегов, которые входят вform_for
, например.f.text_field
Вам не нужно указывать параметр first (object
). Это взято изform_for
синтаксиса.источник