我希望用户能够在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
提前谢谢!
答案 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 %>
我希望这对您有所帮助,并为您设置正确的路径