Rails 5 — действует как пометка на драгоценном камне — простая коллекция форм, выбираемая для определенных списков тегов

Я пытаюсь научиться использовать Acts as Tagable On gem с Rails 5.

Я использую простую форму для форм. Я думаю, что часть проблемы возникает из-за отсутствия связи моделей между предложением и randd_fields.

У меня есть модели под названием Proposal и Randd::Field. Я пытаюсь пометить предложения тегами, которые являются атрибутом :title таблицы Randd::Field.

В моих моделях есть:

Предложение

class Proposal < ApplicationRecord

  acts_as_taggable_on :randd_maturities, :randd_fields, :randd_purposes, :randd_activities


# acts_as_taggable
# acts_as_taggable_on :skills, :interests

Рэндд:: Поле

(без связи с предложением).

Помощник по предложениям

module ProposalsHelper

 include ActsAsTaggableOn::TagsHelper

В моей форме предложения я пытаюсь добавить теги:

<%#= f.text_field :randd_field_list, input_type: "textbox", name:"proposal[randd_field_list][]", html_options: { style: 'width: 100%' } %>


        <%= f.collection_select :randd_field_list, Randd::Field.order(:title), :id, :title, {}, {multiple: true} %>

Первое поле ввода комментируемой формы позволяет мне ввести тег. Однако теги являются текстовыми, и я могу написать все, что захочу. Это не то, чего я хочу. Я хочу, чтобы выбор тегов был атрибутом :title, определенным в моей модели Randd::Field.

Второй вариант, который я попробовал ниже, создает список, но когда я пытаюсь сохранить его как randd_field_list в модели предложения, он сохраняет атрибут :id из таблицы Randd::Field вместо :title.

Когда я пытаюсь удалить компонент :id из строки ввода формы, я получаю сообщение об ошибке:

{} is not a symbol nor a string

Когда я затем пытаюсь удалить {} из строки ввода формы, я получаю сообщение об ошибке:

{multiple: true} is not a symbol nor a string

Может ли кто-нибудь увидеть, как использовать Acts as Tagable On gem, чтобы теги были предопределенными атрибутами заголовков из модели, которая служит в качестве объекта тегов? Мне не нужны теги произвольной формы.

Контроллер предложения имеет:

def proposal_params
      params.require(:proposal).permit(:title, :description, :trl_id, randd_maturities_list: [], randd_field_list: [], randd_purposes_list: [], randd_activities_list: [],

Processing by ProposalsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Cy

затем опуститесь в этом блоке, это выбор, который я сделал в форме:

"randd_field_list"=>"Aerospace Structures",

Затем в конце этого блока:

Unpermitted parameters: randd_maturity_list, randd_field_list
   (0.1ms)  BEGIN

Я пробовал каждый из них - ни один из них не работает.

 <%#= f.text_field :randd_field_list, input_type: "textbox", name:"proposal[randd_field_list][]", html_options: { style: 'width: 100%' } %>
        <%#= f.collection_select :randd_field_list, Randd::Field.order(:title),  :title, :title, input_html: { multiple: true } %>
        <%#= f.input 'randd_field_list',
       options_from_collection_for_select(@randd_fields, :title, :title),
       multiple: true %>
       <%#= f.collection_select 'randd_field_list',
      options_from_collection_for_select(@randd_fields, :title, :title),
      multiple: true %>
       <%= f.input :randd_field_list,:collection => @randd_fields,:label_method => :title,:value_method => :title,:label => "Fields" ,:include_blank => false, :multiple => true %>

Верхний работает для присвоения значений randd_field_list, но он не позволяет использовать мои предопределенные атрибуты :title в таблице Randd::Field для использования в качестве тегов.

Остальные попытки дают ошибку недопустимого параметра, когда я пытаюсь сохранить форму.


person Mel    schedule 13.01.2017    source источник


Ответы (2)


Замените :id на :title.

<%= f.collection_select :randd_field_list, Randd::Field.order(:title), :title, :title, {}, {multiple: true} %>

Вы хотите передать tag.title вместо id в качестве значения выбранного параметра. http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select

person Zzz    schedule 13.01.2017
comment
Привет, Чжун, спасибо! Это возвращает меня к этой ошибке: Недопустимые параметры: randd_maturity_list, randd_field_list. Я не могу понять, как разобраться в документах док-станции API. Ничто из этого не имеет для меня смысла. Форма отображается, и заголовки составляют список так, как вы предложили, но я не могу сохранить выбор и несколько: true тоже не работает. - person Mel; 13.01.2017
comment
вам нужно добавить randd_maturity_list: [], randd_field_list: [] к разрешенным_парамам - person Zzz; 13.01.2017
comment
Это похоже на мои разрешенные параметры в контроллере предложений. Ошибка - недопустимый параметр, когда я пытаюсь использовать форму с полем выбора так, как она есть сейчас. Я не получаю эту ошибку, если я делаю поле формы свободным текстом (но тогда я не могу использовать свои собственные определенные теги) - person Mel; 13.01.2017
comment
можете ли вы отредактировать свой вопрос с помощью фрагментов кода метода permitted_params и журнала запросов, когда вы используете параметры выбора? - person Zzz; 13.01.2017
comment
Привет - я добавил их в конец поста - person Mel; 13.01.2017
comment
благодаря. вы можете редактировать с помощью журнала запросов, что вы выбрали несколько тегов? Я подозреваю, что он проходит как 'randd_maturity_list' = >'a, b, c'. Если это так, вместо этого используйте :randd_maturity_list, :randd_field_list для разрешенных_параметров. - person Zzz; 13.01.2017
comment
Я не могу заставить его выбрать несколько тегов. Когда я использую щелчок cmd (на Mac) - он просто выбирает второй вариант и забывает первый (точно так же, если бы я не использовал щелчок cmd и просто щелкнул. - person Mel; 13.01.2017
comment
Хотя - в настоящее время у меня есть 2 тега, назначенные с помощью консоли rails, поэтому должен быть способ принять массив - просто не через форму (используя те настройки, которые у меня есть) - person Mel; 13.01.2017
comment
вы можете попробовать этот синтаксис {:multiple =› true}? - person Zzz; 13.01.2017
comment
Я все еще могу выбрать только один - person Mel; 13.01.2017
comment
Второй ответ на этот пост предложил другой синтаксис, но он тоже не работает stackoverflow.com/questions/22159614/ - person Mel; 13.01.2017
comment
Я также пробовал эту формулировку, но она выдает ошибку, которая вообще не имеет смысла: ‹%= f.select_tag 'randd_field_list', options_from_collection_for_select(@randd_fields, :title, :title), Multiple: true %› - person Mel; 13.01.2017
comment
Ошибка говорит: неопределенный метод `map' для nil:NilClass Вы имели в виду? кран; но я нигде не писал карту - person Mel; 13.01.2017
comment
Я полагаю, вы можете взглянуть на select2, которые поддерживают множественный выбор в виде раскрывающегося списка. - person Zzz; 20.01.2017
comment
как вы думаете, это больше о простой форме, чем о действиях, которые можно пометить на драгоценном камне? Простая форма имеет опцию Multiple: true, которую вы можете указать для формы выбора. Зачем ему это, если его нельзя использовать? - person Mel; 21.01.2017
comment
Я не могу заставить это работать (просто флаг на случай, если кто-то еще застрял в этой проблеме) - но даю баллы, потому что вы очень помогли мне с другими вещами. - person Mel; 27.01.2017

Решать

Замените :id на :title

Как сказал Чжун.

И проблема, с которой вы сталкиваетесь, я думаю, потому что ваш код сингулярен. Вместо этого оно должно быть во множественном числе. Надеюсь, это поможет

person Yahs Hef    schedule 26.01.2017
comment
Привет, Yahs. Я изложил проблему, с которой столкнулся в связи с предложением Чжуна, в комментариях под его ответом. Как вы думаете, какая часть моего единственного кода вызывает проблему? - person Mel; 26.01.2017