如何接受以逗号分隔的列表来为模型构建标签?

由于当前应用程序的灵活性有限,我正在关闭acts_as_taggable_on。 相反,我正在从头开始构建我的标签作为他们自己的模型。 但是,我已经错过了表单的“@ model.tag_list”方法,它将分割逗号分隔的用户输入并制作单个标记。 我的“可标记”模型是一个video,我很好奇如何编写一个基本上像“tag_list”一样的方法?

例:

  .... 

鉴于输入: "one, two, three"将构建三个标签作为@video的孩子。

 @video.tags.each do |tag| puts tag.name end => one two three 

编辑

我在Tag模型中非常喜欢这样,以保持forms混乱我的控制器。 也许作为自定义属性? 也许video模型更有意义? 我知道如何使自定义方法返回自定义数据,但不分配它。 一些研究指出了这种方式(尚未测试)

video.rb

 def tag_list=value value.split(',').each do |tag| self.tags.build(:name => tag).save end end 

好像我的示例代码最终正常工作

video.rb

 def tag_list=value value.split(',').each do |tag| self.tags.build(:name => tag).save end end 

编辑

还需要添加以使其在表单中工作:

 def tag_list self.tags.join(',') end 

您可以将tag_list作为属性保留在Video上,然后在您的创建中,您可以使用以下内容:

 def create @video = Video.new(params[:video]) if @video.save params[:video][:tag_list].split(',').each do |tag| @video.tags.create_by_name(tag) end else render :new end end