我正在尝试生成类似于 SO 的标记系统。我正在使用 Select2 gem。当用户最初进入新页面时,表单应该只显示他们的标签。在页面上,他们可以通过输入标签名称并用空格或逗号分隔它们来创建新标签。
我的问题是,当我提交此表单时,标签没有正确链接到 ID。我收到错误“找不到 id = 0 的标签”,或者如果我将数字 12 作为标签,“找不到 id = 12 的标签”
一个用户有多个标签;一个帖子有很多标签;一篇文章通过标签有很多标签;一个标签有很多标签;一个标签通过标签有很多帖子;一个标签属于一个用户
如何指定标签 ID 名称并且只显示标签名称?
我的标签控制器看起来像这样
respond_to :json
def index
@tags = current_user.tags
respond_with(@tags.map{|tag| {:id => tag.id, :name => tag.name, :user_id => tag.user_id} })
end
我的 JavaScript 看起来像这样
var items = [];
$.getJSON('http://localhost:3000/tags.json', function(data) {
$.each(data, function(i, obj) {
return items.push(obj.name);
});
$("#post_tag_ids").select2({
tags: items,
tokenSeparators: [",", " "]
});
});
我的表格看起来像这样
= semantic_form_for([@user, @post], :html => { :class => 'form-horizontal' }) do |f|
= f.inputs do
= f.input :summary, :label => false, :placeholder => "Title"
= f.input :tag_ids, :as => :string, :label => false, :placeholder => "Tags", input_html: {:id => "post_tag_ids", :cols => 71}
= f.buttons do
.action
= f.commit_button :button_html => { :class => "btn btn-primary" }
我的 Post Controller 看起来有点像这样
def create
@post = Post.new(params[:post])
@post.user = current_user
@post.save
@post.tag!(params[:tag_ids], current_user.id)
end
我的帖子模型有一个标签!方法
def tag!(tags, user)
tags = tags.split(",").map do |tag|
Tag.find_or_create_by_name_and_user_id(tag, user)
end
self.tags << tags
end