Не могу понять, как добавить полиморфные теги в приложение rails - PullRequest
0 голосов
/ 22 мая 2018

У меня есть пример приложения 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

1 Ответ

0 голосов
/ 22 мая 2018

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

модель пользователя

class User < ApplicationRecord
  has_many :tags, as: :taggable
  accepts_nested_attributes_for :tags 
end

в вашей форме

<%= form_with(model: user, local: true) do |form| %>
  ...
 <div class="field">
    <% form.fields_for :tags do |t| %>
      <%= u.text_field :tag_name %>
    <% end %>
 </div>
  ...
<% end %>

в вашем контроллере, пожалуйста, добавьте также другой атрибут

params.require(:user).permit( tags_attributes: [:id,:tag_name])
...