我有一个列表模型。列表具有嵌入的标签(使用 Mongoid)。当用户创建列表时,他可以在文本字段中通过逗号分隔列表指定关联的标签。
如何通过 List 关联存储标签?我可以在 List 模型上使用 Accepts_nested_attributes_for :tags 吗,还是必须预处理标签字符串?
这是我到目前为止所拥有的。如何处理标签字符串,将其拆分并将每个标签单独存储在作为列表一部分的嵌入式标签文档中?
列表控制器:
class ListsController < ApplicationController
def new
@list = List.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @list }
end
end
def create
list_params = params[:list]
list_params[:user_id] = current_user.id
@list = List.new(list_params)
if @list.save
redirect_to @list, notice: 'List was successfully created.'
else
render action: "new"
end
end
end
列表创建表单
= form_for @list do |f|
- if @list.errors.any?
#error_explanation
%h2= "#{pluralize(@list.errors.count, "error")} prohibited this list from being saved:"
%ul
- @list.errors.full_messages.each do |msg|
%li= msg
.field
= f.label :name
= f.text_field :name
.field
= f.label :description
= f.text_field :description
.field
= f.fields_for :tags do |t|
= t.label :tags
= t.text_field :name
.actions
= f.submit 'Save'
列表模型
class List
include Mongoid::Document
include Mongoid::Timestamps
field :name
field :description
embeds_many :items
embeds_many :comments
embeds_many :tags
belongs_to :user
accepts_nested_attributes_for :tags
标记模型
class Tag
include Mongoid::Document
field :name
has_one :list
end
根据 Geoff 的建议进行编辑
列表控制器最终看了。
def create
tags = params[:tags][:name]
list = params[:list]
list[:user_id] = current_user.id
@list = List.new(list)
tags.gsub("\s","").split(",").each do |tag_name|
@list.tags.new(:name => tag_name)
end
if @list.save
redirect_to @list, notice: 'List was successfully created.'
else
render action: "new"
end
end