У меня есть модель поста, в которой я пытаюсь реализовать вызов before_save, чтобы я мог манипулировать вводом из формы перед ее сохранением в базе данных.Все, что я пробую, выдает ошибку, будь то в нижнем регистре, параметризации, gsub или split.Я получаю ошибку undefined method 'downcase' for
каждый раз.Просто замените нижний регистр тем, что я пытаюсь сделать.Все, что я хочу сделать, это взять все, что вводит пользователь, и заменить пробелы подчеркиванием.
Вот одна из версий модели 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_tag на любую из этих альтернатив, и это все равно приведет к ошибке.
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'