1

不得不说我并没有真正寻找解决方案,因为我不知道我应该寻找什么。

情况是这样的:

我有一个对象(NewsItem),它有一个名为标签的关系。

class NewsItem < ActiveRecord::Base
    has_many :tags
end

在提交导致此错误的更新/创建表单时,我将这些标签作为字符串数组获取:

ActiveRecord::AssociationTypeMismatch 
Tag expected, got String

现在,在 rails 将它们保存为关系之前,我需要将这些字符串转换为标签,如下所示:

params[:tags].each do |tag|
    Tags.find_or_create_by_name(tag)
end

通过这种方式,rails 可以获得所需的标签。

我知道我可以把它放在控制器中,但我需要它在模型上..

我怎样才能做到这一点?

提前致谢!

4

1 回答 1

0

最简单的解决方案是添加一个新方法tags_list,与您在控制器中所做的相同,如下所示:

class NewsItem < ActiveRecord::Base

  has_many :tags

  def tags_list
    self.tags.map { |tag| tag.name }
  end

  def tags_list=(tag_names)
    self.tags = tag_names.map do |tag|
      Tag.find_or_create_by_name(tag)
    end
  end

end

然后,在您看来,您必须将表单字段名称从更改tagstags_list也。这就是常见的插件acts_as_taggable_on通常会做的事情。

于 2012-06-21T11:43:40.143 回答