Ruby on rails 我如何让用户在添加条目时添加并关联逗号分隔的类别列表?

Ruby on rails 我如何让用户在添加条目时添加并关联逗号分隔的类别列表?,ruby-on-rails,ruby,forms,model,Ruby On Rails,Ruby,Forms,Model,为了让这项功能发挥作用,我已经奋斗了很长一段时间: 我希望我的用户能够在上传照片时选择类别,但还可以指定以逗号分隔的类别列表,以创建/查找并与照片关联。我已经通过使用attr_访问器实现了这一点:照片模型上的新类别,但如果没有现有列,则会破坏回形针和Exifr。显然,图片上传和EXIF数据检索对于一个摄影网站来说非常重要,但是上传照片时不能添加类别是一件痛苦的事情 到目前为止我尝试过的方法: 使用attr\u访问器为新的\u类别添加字段。打碎宝石 使用Ajax子表单添加类别。Formtasti

为了让这项功能发挥作用,我已经奋斗了很长一段时间:

我希望我的用户能够在上传照片时选择类别,但还可以指定以逗号分隔的类别列表,以创建/查找并与照片关联。我已经通过使用attr_访问器实现了这一点:照片模型上的新类别,但如果没有现有列,则会破坏回形针和Exifr。显然,图片上传和EXIF数据检索对于一个摄影网站来说非常重要,但是上传照片时不能添加类别是一件痛苦的事情

到目前为止我尝试过的方法:

  • 使用attr\u访问器为新的\u类别添加字段。打碎宝石
  • 使用Ajax子表单添加类别。Formtastic无法处理它
  • 向照片模型中添加新类别的列。这是可行的,但很可怕
我还没有尝试使用嵌套表单,但我需要截取它并阻止它正常处理它

以下是我试图实现的一个示例:

以及我用于关联类别的函数:

def process_new_categories
    unless self.new_categories.nil?
        for title in self.new_categories.split(",")
            self.categories << Category.find_or_create_by_title(title.strip.capitalize)
        end
    end
end
def过程\新的\类别
除非self.new_.nil?
用于self.new_categories.split(“,”)中的标题

self.categories如果我能大致看到您的表单代码,我会更容易提供帮助。我对Formtastic一无所知,但这在基本Rails中非常简单和常见

只需在表单中添加一个文本字段:

<%= text_field_tag :new_categories %>

查看此屏幕,它显示了如何创建一个与您试图重新创建的categories类类似的tags

啊哈,昨天晚上我试了一半,但我被什么东西分散了注意力,转向了另一条路。我认为如果我确保它在模型更新后运行,并将模型对象传递给函数,它就可以工作;除非我忘了昨晚为什么不这么做的原因。我查过后会给你回电话的!:)好主意,我将该方法移到了模型本身上,这样它就可以有正确的上下文来进行更新。只需运行一个测试,效果很好-Exifr没有问题,这是一种解脱。非常感谢:)这几乎正是我想要达到的目标——我必须检查一下它是否适用于回形针和Exifr。谢谢你,我不知怎么错过了Railscast。没问题,虽然它是不久前写的,但我相信在rails的新版本中,有一种更好的方式来描述has_和Own_之间的关系
#changing your method to take a parameter here
#and moving method to the model object
model_obj.process_new_categories(params[:new_categories])