Ruby on rails 未定义的方法“-';至于;“书籍,孩子们”一串

Ruby on rails 未定义的方法“-';至于;“书籍,孩子们”一串,ruby-on-rails,tags,acts-as-taggable,Ruby On Rails,Tags,Acts As Taggable,问题--未定义“书籍,儿童”的方法“-”:String “在类固醇上作为标记”已经有一段时间没有维持了。直到最近,它一直工作得很好。现在,当我尝试创建或更新标记时,会收到一条错误消息--> “书籍,儿童”的未定义方法“-”:字符串 充当_taggable.rb 1. module ActiveRecord #:nodoc: 2. module Acts #:nodoc: 3. module Taggable #:nodoc: 4. def self.include

问题--未定义“书籍,儿童”的方法“-”:String

“在类固醇上作为标记”已经有一段时间没有维持了。直到最近,它一直工作得很好。现在,当我尝试创建或更新标记时,会收到一条错误消息--> “书籍,儿童”的未定义方法“-”:字符串

充当_taggable.rb

   1. module ActiveRecord #:nodoc:
   2. module Acts #:nodoc:
   3.  module Taggable #:nodoc:
   4.    def self.included(base)
   5.  base.extend(ClassMethods)
   6. end


   7. module ClassMethods

   8.  def acts_as_taggable
   9.   has_many :taggings, :as => :taggable, :dependent => :destroy
   10.  has_many :tags, :through => :taggings

   11. before_save :save_cached_tag_list

   12. after_create :save_tags  
   13. after_update :save_tags   

   14.  include ActiveRecord::Acts::Taggable::InstanceMethods
   15. extend ActiveRecord::Acts::Taggable::SingletonMethods

   16. alias_method_chain :reload, :tag_list
:::::::::::

   17. def save_tags
   18.       return unless @tag_list

   19.     new_tag_names = @tag_list - tags.map(&:name)
   20.   old_tags = tags.reject { |tag| @tag_list.include?(tag.name) }

   21. self.class.transaction do
   22.  if old_tags.any?
   23.  taggings.find(:all, :conditions => ["tag_id IN (?)", 
   24. old_tags.map(&:id)]).each(&:destroy)
   25.       taggings.reset
   26.    end

   27.  new_tag_names.each do |new_tag_name|
   28.  tags << Tag.find_or_create_by_name(new_tag_name)
   29. end

   30.  end

   31.  true
   32. end
   33.  end
17。def保存标签
18返回,除非@tag_list
19new_tag_names=@tag_list-tags.map(&:name)
20old|u tags=tags.reject{| tag |@tag_list.include?(tag.name)}
21self.class.transaction.do
22如果有旧标签?
23taggings.find(:all,:conditions=>[“tag_id IN(?)”,
24.旧标签。地图(&:id)]。每个(&:destroy)
25标记重置
26结束
27新的标签名称。每个do都有新的标签名称|
28标签:销毁
4.验证:name,:presence=>true
5.验证名称的唯一性
6.定义self.find_或create_by_name(name)
7.Tag.where(:name=>name).first_或_createdo|标记|
8.tag.name=名称
9结束
10结束

任何帮助都将不胜感激。谢谢。

哪里创建了
@tag\u list
?它似乎过去是一个数组,现在是一个字符串

如果需要快速修复,可以将第19行更改为:

new_tag_names = @tag_list.split(', ') - tags.map(&:name)

它是在另一个地方出错还是在同一个地方出错?也许你可以改变
@tag_list
的创建方式,使其成为一个数组-如果你在源代码处更改它,你应该会没事的。我听从了你的建议,对我的视图和模型文件做了一些重新调整,到目前为止效果良好。我将做进一步的测试以防万一。
    1. class Tag < ActiveRecord::Base
    2. attr_accessible :name
    3.  has_many :taggings, :dependent => :destroy
    4.  validates :name, :presence=>true
    5. validates_uniqueness_of :name
    6.  def self.find_or_create_by_name(name)
    7.  Tag.where(:name=>name).first_or_create do |tag|
    8.  tag.name = name
    9. end
    10. end
new_tag_names = @tag_list.split(', ') - tags.map(&:name)