分割字符串并将其保存在多个记录中

时间:2019-01-31 22:05:36

标签: ruby-on-rails database activerecord

我希望用户能够在text_field中写下他们作为标签的技能。我已经可以存储字符串并将其拆分为(顺便说一句:用户有一个帐户)

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

但是这并不优雅,因为它现在正在视图中进行处理,并且由于它只是一个字符串(显示为数组),因此我无法进行迭代。 in this video说明了我想要实现的目标。

用户应在一个字段中写下自己的技能,字符串应在每个“#”符号处分开,并存储在该用户应属于的字段中,因此我可以在执行url.com/user/hashtag/xyz之类的操作时xyz是主题标签。

该视频教程制作得不错,但是由于find_by不再可用,因此不适用于Rails 5+。我也不想创建一些新表,因为稍后我想对除account之外的其他模型执行相同的操作。稍后,我想通过select2之类的宝石在搜索字段中添加自动完成功能。这就是为什么为标签添加另一个表可能有所帮助的原因? :S

提前谢谢!

1 个答案:

答案 0 :(得分:0)

所以这个简短的问题有很多事情。

我要做的第一件事是创建一个标签表

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 %>

我希望这对您有所帮助,并为您设置正确的路径