Расширение ActsAsTaggableOn для добавления изображений, но с ошибкой «Невозможно массово назначить защищенные атрибуты: tag_image» - PullRequest
2 голосов
/ 04 марта 2012

Я использую гем acts_as_taggable_on , чтобы помечать объявления. Он работает нормально, но мне нужны теги для изображений, поэтому я решил расширить плагин и написал этот модуль:

# Add logic to ActsAsTaggableOn Tag model
module TagExtend

  def self.included(recipient)
    recipient.extend(ClassMethods)
  end
  module ClassMethods

    ActiveRecord::Base.attr_accessible :tag_image
    ActiveRecord::Base.has_attached_file :tag_image,
      :styles => { :medium => "300x200>"},
      :storage => :s3,
      :bucket => S3_BUCKET,   
      :s3_host_name =>  S3_HOST,
      :s3_credentials => {
        :access_key_id => S3_KEY,
        :secret_access_key =>S3_SECRET      
      }
  end

end

И в файле инициализатора:

require File.dirname(__FILE__) + '/../../lib/tag_extend.rb'
ActsAsTaggableOn::Tag.send(:include, TagExtend)

Это должно работать, но когда я пытаюсь сохранить тег с изображением (из ActiveAdmin), я получаю: Can't mass-assign protected attributes: tag_image

Есть предложения по этому поводу?

1 Ответ

2 голосов
/ 04 марта 2012

если меня не смущает, вам нужно вызвать attr_accessible для определенного класса, а не для базового класса ActiveRecord::Base.

, поэтому это будет:

module TagExtend
  def self.included(clazz)
    clazz.attr_accessible :tag_image
    clazz.has_attached_file :tag_image, {...}
  end
end

и вы НЕ должны делать что-то вроде require File.dirname(__FILE__) + '/../../lib/tag_extend.rb' всегда уважать путь загрузки!

, поэтому используйте require 'tag_extend' и добавьте lib к вашему пути автозагрузки, если вы используете rails.

...