По какой-то причине я не могу украсить определенную модель, не имея возможности даже получить доступ к атрибутам этой модели через декоратор в консоли.Невозможно украсить определенную модель - уровень стека слишком глубокий
Я постоянно получаю Stack Too Deep
ошибки непоследовательно; непоследовательно за пределами того факта, что я вообще не могу получить доступ к атрибутам оригинальной модели, прежде чем получить ошибку Stack Too Deep
.
Поведение действительно бизарр, потому что test_method
работает при попытке сначала, но я не могу фактически получить доступ к тем же атрибутам исходной модели; Я создал тонны декораторов и никогда не сталкивался с этой проблемой.
декоратор довольно прост:
class PersonaDecorator
attr_reader :persona
include ActionView::Helpers
def initialize(persona)
@persona = persona
end
def self.decorate_personas(personas)
personas.map { |persona| new(persona) }
end
class << self
alias_method :build_collection, :decorate_personas
end
def respond_to_missing?(method, include_private=false)
persona.respond_to?(method) || super
end
def method_missing(method, *args, &blocks)
persona.send(method, *args, &block)
end
def age
"#{persona.age} years old"
end
def description
"#{persona.description}".html_safe
end
def test_method
content_tag(:div, "#{persona.description}")
end
def test_method2
content_tag(:div, "#{persona.creative_commons_attribution}")
end
def class_box
content_tag :div, class: 'large-12.columns' do
cc_class = case persona.creative_commons_attribution_license
when 'Attribution-ShareAlike'
'cc_sa'
when 'Attribution-NoDerivs'
'cc_nd'
when 'Attribution-NonCommercial'
'cc_nonc'
when 'Attribution-NonCommercial-NoDerivs'
'cc_nonc_nd'
when 'Attribution-NonCommercial-ShareAlike'
'cc_nonc_sa'
end
content_tag(:figure, class: "large-3-columns creative_commmons_attribution_badge #{cc_class}")
content_tag :a, class: 'creative_commons_explanation' do
"#{persona.creative_commons_attribution}"
end
end
end
end
Модель также довольно просто:
class Persona < ActiveRecord::Base
#virtual attributes
attr_accessor :approve_persona, :unapprove_persona, :full_name
#special configuration, properties, and actions
CREATIVE_COMMONS_ATTRIBUTION_LICENSES = %w(None Attribution-ShareAlike Attribution-NoDerivs Attribution-NonCommercial Attribution-NonCommercial-ShareAlike Attribution-NonCommercial-NoDerivs)
has_attached_file :avatar
has_attached_file :background_image
extend FriendlyId
friendly_id :slug_candidates, use: [:slugged, :history]
# call backs
before_save :perform_state_change
include NameConcern
# validations
validates :first_name, :last_name, presence: true
validates_attachment :avatar, content_type: { content_type: ["image/jpeg", "image/webp", "image/png"] }, size: { less_than: 5.megabyte }
validates :age, numericality: { greater_than: 0, integer: true }
validates :description, length: { minimum: 50 }
validates :byline, length: { maximum: 140 }
#validates :project, presence: true
validates_with CreativeCommonsValidator
#associations
belongs_to :project
has_many :influencers
has_many :interests
has_many :goals, as: :goalable
# state_machine
state_machine :state, initial: :pending do
state :approved
state :coming_soon
end
def full_name
"#{first_name} #{last_name}"
end
def slug_candidates
[
:full_name,
[:full_name, :age],
[:full_name, :occupation, :age]
]
end
def perform_state_change
self.state = 'approved' if approve_persona == '1'
self.state = 'pending' if unapprove_persona == '1'
end
end
В случае валидатора может быть причиной, это базовый уровень один (хотя тот, который не может быть одной подкладке через Proc
class CreativeCommonsValidator < ActiveModel::Validator
def validate(record)
if record.creative_commons_license != "None" || !record.creative_commons_license.blank?
if record.creative_commons_attribution.blank? || record.creative_commons_attribution_link.blank?
record.errors[:base] << "name and link to original owner of copyright work attached for this record incorrectly done."
end
end
end
end
валидатор однако работает правильно в контексте, который он должен (новые и существующие записи), поэтому он сомнительно для меня, это проблема ...
Хм, у меня просто ссылается на аксессуар в других декораторах без проблем ... Подождите, я не думаю, что правильно интерпретирую ваш ответ ... –