Ruby on rails 未定义的方法“-';至于;“书籍,孩子们”一串
问题--未定义“书籍,儿童”的方法“-”:String “在类固醇上作为标记”已经有一段时间没有维持了。直到最近,它一直工作得很好。现在,当我尝试创建或更新标记时,会收到一条错误消息--> “书籍,儿童”的未定义方法“-”:字符串 充当_taggable.rbRuby 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
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)