Использование скрытого поля внутри Rails 5 Partial для сохранения массива - PullRequest
0 голосов
/ 03 марта 2019

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

Моя таблица Subscriber выглядит так в schema.rb:

  create_table "subscribers", force: :cascade do |t|
    t.string "first_name"
    t.string "last_name"
    t.string "phone"
    t.string "email"
    t.text "tags", default: [], array: true
    t.text "admin_notes"
    t.boolean "unsubscribe"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

Моя часть отображается следующим образом:

<%= render partial: "layouts/new_subscriber", locals: { tags: "buyer, LM-house-tour-checklist" } %>

, которая вызывает _new_subscriber.html.erb часть:

<%= simple_form_for(@new_subscriber) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.label :first_name %>
    <%= f.text_field :first_name, required: true, class: "form-control" %>
    <%= f.label :last_name %>
    <%= f.text_field :last_name, required: true, class: "form-control" %>
    <%= f.label :phone %>
    <%= f.text_field :phone, required: true, class: "form-control" %>
    <%= f.label :email %>
    <%= f.text_field :email, required: true, class: "form-control" %>
    <%= f.hidden_field :tags, value: tags %>
  </div>

  <div class="form-actions text-center">
    <%= f.submit "Get My Checklist", class: "btn" %>
  </div>
<% end %>

Я тестировал с помощью ChromeИнспектор кода, который «покупатель, LM-house-tour-checklist» передается в скрытое значение поля.

Однако, когда я отправляю, он создает подписчика с атрибутом :tags ["uyer"].Это супер странно и необъяснимо для меня.

Другая информация:

  • В моей subscriber модели ничего нет.
  • @new_subscriber определено в моем ApplicationController с использованием before_action :new_subscriber иdef new_subscriber @new_subscriber = Subscriber.new end
  • Я попробовал метод, описанный здесь , но безрезультатно

Может кто-нибудь помочь мне сделать это "Railsiest" возможным способом?Это не кажется чем-то необычным, но я не могу заставить его работать должным образом.

1 Ответ

0 голосов
/ 03 марта 2019

Возможно, потому что оно отправлено в виде строки.

Попробуйте добавить attr_accessor :plain_tags в модель. Вместо поля тегов используйте этот атрибут.

А в before_create callback напишите что-то вроде

before_create :populate_tags

def populate_tags
  return if self.tags_plain.blank?
  self.tags = self.tags_plain.split(",")
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...