代码之家  ›  专栏  ›  技术社区  ›  ddonche

在后模型中保存之前的未定义方法错误

  •  0
  • ddonche  · 技术社区  · 7 年前

    我有一个post模型,在这个模型中,我试图实现一个before-save调用,这样我就可以在将表单保存到数据库之前操纵它的输入。我尝试的任何操作都会引发一个错误,无论是downcase、parameterize、gsub还是split。我得到一个 undefined method 'downcase' for 每次出错。只要用我想做的任何事情来替换Downcase就行了。我所要做的就是接受用户输入的任何内容,并用下划线替换空格。

    这是一个版本的post模型。

    class Post < ApplicationRecord
      belongs_to :user
      has_many :comments, dependent: :destroy
      before_save :permalink_tag
      strip_attributes
    
      acts_as_taggable
    
      private
      def permalink_tag 
        self.tag_list = self.tag_list.split(' ').join('_') unless self.tag_list.nil?
      end
    end
    

    现在,您可以简单地将permalink标记方法中的代码替换为这些选项中的任何一个,它仍然会导致错误。

    self.tag_list.gsub(/\s+/, "_")
    before_save { |post| post.tag_list = post.tag_list.downcase }
    self.tag_list.parameterize.underscore
    

    更详细的错误是:

    NoMethodError in PostsController#update
    undefined method `downcase' for ["sample-tag"]:ActsAsTaggableOn::TagList
    

    应用程序跟踪:

    app/models/post.rb:4:in `block in <class:Post>'
    app/controllers/posts_controller.rb:45:in `block in update'
    app/controllers/posts_controller.rb:44:in `update'
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   ddonche    7 年前

    ActsAsTaggableOn.force_lowercase = true
    ActsAsTaggableOn.force_parameterize = true