разбить строку и сохранить ее в нескольких записях - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу, чтобы пользователи могли записывать свои навыки как хэштеги в text_field.Я уже могу сохранить строку и разделить ее следующим образом (кстати: у пользователя одна учетная запись)

<% @user.account.hashtag.split('#').reject { |c| c.empty? }.each do |d| %>
   <p><%= d %></p>  
<% end %>

Но это не элегантно, так как она обрабатывается в представлении прямо сейчас, и так как это всего одна строка, котораяотображается как массив, я не могу повторить.То, чего я хочу достичь, объясняется в этом видео .

Пользователь должен записать свои навыки в одном поле, строка должна быть разбита на каждый символ «#» и сохранена вполе, которое должно принадлежать пользователю, поэтому я могу сделать что-то вроде url.com/user/hashtag/xyz, в то время как xyz является хэштегом.

Видеоурок сделан хорошо, но он не работает для rails 5+, так как find_by недоступенбольше;Также я не хочу создавать новые таблицы, потому что позже я хочу сделать то же самое с другими моделями, кроме account.Позже я хочу добавить функцию автозаполнения в поле поиска с помощью драгоценных камней, таких как select2 .Вот почему это может помочь добавить еще одну таблицу для тегов?: S

Заранее спасибо!

1 Ответ

0 голосов
/ 14 апреля 2019

так что в этом коротком вопросе много вещей.

Первое, что я хотел бы сделать, - это создать хэш-таблицу

class CreateHashtags < ActiveRecord::Migration[5.0]
  def change
    create_table :hashtags do |t|
      t.string :hashtag
      t.references :hashtagsable, polymorphic: true

      t.timestamps null: false
    end
  end
end

Эта строка критична t.references :hashtagsable, polymorphic: trueЭто создаст 2 новых поля

:hashtagsable_type => :string, # This reference the model of the assiciation
:hashtagsable_id => :integer,  # This reference the id of the assiciation

Эта новая модель должна выглядеть следующим образом:

# app/models/hashtag.rb
class Hashtag < ApplicationRecord
  belongs_to :hashtagsable, polymorphic: true
end

Теперь вашей пользовательской модели вы должны добавить эту строку

class User < ApplicationRecord
  has_many :hashtags, as: :hashtagsable # User.last.hashtags
end
class Account < ApplicationRecord
  has_many :hashtags, as: :hashtagsable # Account.last.hashtags
end

в свойвид должен выглядеть так:

<% @user.account.hashtags.each do |hashtag| %>
   <p><%= hashtags.hashtag %> </p> 
<% end %>

Надеюсь, это поможет и поможет вам выбрать правильный путь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...