У меня есть пример приложения rails со списком пользователей.И я хотел поэкспериментировать с полиморфными тегами.
На данный момент я могу создавать теги для пользователей через консоль следующим образом User.first.tags.create(name: "new tag name")
Но возникают проблемы с добавлением их через веб-форму
Вот что я сделал:
rails g model Tag name taggable:references{polymorphic}
сгенерировал следующую миграцию
class CreateTags < ActiveRecord::Migration[5.1]
def change
create_table :tags do |t|
t.string :name
t.references :taggable, polymorphic: true
t.timestamps
end
end
end
модель тега
class Tag < ApplicationRecord
belongs_to :taggable, polymorphic: true
end
модель пользователя
class User < ApplicationRecord
has_many :tags, as: :taggable
end
Поле тегов
<%= form_with(model: user, local: true) do |form| %>
...
<div class="field">
<%= form.label :tag_list %>
<%= form.text_field :tag_list, placeholder: "tags separated by comma" %>
</div>
...
<% end %>
Я также нашел следующий код, но получил ошибку You cannot call create unless the parent is saved
.
добавил следующий установщик в модель пользователя и добавил :tag_list
в сильные параметры пользователя
def tag_list=(vals)
self.tags = vals.split(", ").each do |val|
tags.where(name: val.strip).first_or_create!
end
end