2

我正在尝试在我的网站上实施acts_as_taggable_on 。

我已经运行了安装设置,它运行良好。我正在努力编写代码以使其工作。

我得到正确的错误如下:undefined method 'each' for "tag1, tag2, tag3":String在第 29 行@video = Video.new(params[:video])

这是我所拥有的...

视频控制器

acts_as_taggable

以我的形式

= f.text_field :tags

在我的模型中

@video = Video.new(params[:video])
@video.tag_list = params[:video][:tags]
if @video.save
  ...
4

1 回答 1

3

您收到此错误是因为您传递params[:video]了哪些属性以及其他属性,其中包含模型中:tags属性的数据Video。这是一个问题,因为它将使用acts_as_taggable_on的 writer 方法tags=,它需要一个Array,而不是 a String,这与tag_list=需要a不同。String

一种解决方案,保持大部分代码不变,将其:tags从中删除params并将其传递给tag_list=

tags_str = params[:video].delete(:tags)
@video   = Video.new(params[:video])
@video.tag_list = tags_str

if @video.save
  # ...

当然,上面有很多变化来获得一个可行的解决方案。一方面,你可以只给tags=想要的东西,:tags分成params一个Array

video_params = params[:video]
video_params[:tags] = video_params[:tags].split(/\,\s*/)
@video   = Video.new(video_params)

if @video.save
  # ...
于 2012-07-31T01:14:40.167 回答