2013-10-15 2 views
2

Как передать хэш-параметры динамически в коде ниже?Динамические параметры скрепки скрепки hash

class Resource < ActiveRecord::Base 
    belongs_to :attachable, :polymorphic => true 

    has_attached_file :attachment #, paperclip_options from attachable 

end 


class ItemTypeOne < ActiveRecord::Base 
    has_many :resources, :as => :attachable, :dependent => :destroy 

    def paperclip_options 
     ITEM_TYPE_ONE_OPTIONS 
    end 
end 

class ItemTypeTwo < ActiveRecord::Base 
    has_many :resources, :as => :attachable, :dependent => :destroy 

    def paperclip_options 
     ITEM_TYPE_TWO_OPTIONS 
    end 
end 

У меня есть две модели (так называемые ItemTypeOne и ItemTypeTwo в коде выше). Эти две модели имеют совершенно разные варианты хранения Скрепка (стиль, путь и т.д.)

ответ

0

Я думаю, она будет идти, как этот

class Resource < ActiveRecord::Base 
    belongs_to :attachable, :polymorphic => true 

    has_attached_file :attachment, attachment_options 

    def attachment_options 
     attachable.paperclip_options 
    end 
end 

Я бегу, и не проверял этот код. сообщите мне, помогло ли это.

Вы, вероятно, нужно написать метод класса, который проверяет тип объекта междунара он полиморфные отношения, а затем передать параметры на основе этого типа

+0

Спасибо за ответ. Не работает к сожалению: 'method_missing ': неопределенная локальная переменная или метод' attachment_options' для # (NameError) – user1889776

+0

, и если вы ставите 'self.' перед именем в определении метода? Хм ... нет, это нужно для работы с экземпляром, но ссылочный вызов - это метод на основе классов. –

0

Я не уверен, что вы после этого можно на момент.

Задача has_attached_file Выполняется в контексте Resourceкласс. И класс не знает, какой тип attachable будущих экземпляров будет иметь в любой момент времени.

Для этого для этого вызова необходимо будет взять и сохранить имя лямбда (или метода), а затем оценить его (или вызвать метод) в контексте данного экземпляра и использовать параметры, которые вызывают возврат. Только тогда у вас могут быть разные варианты в зависимости от конкретного типа отношения.

Насколько я знаю, скрепка не имеет этой функции.

+0

Правильно, хотя я не могу получить метод attachment_options, который вызывается в первую очередь. Если я попробую что-то вроде has_attached_file: attachment, lambda {| attachment | attachment.instance.attachment_options}, (предположим, что attachment_options возвращает хеш на данный момент) I эта ошибка: неопределенный метод 'each 'для # (NoMethodError). Похоже, я не могу заменить хэш лямбдой? Я могу заменить некоторые ключи в хэш (например: style) на лямбда, но похоже, что я не могу заменить весь хэш. Это моя главная проблема. – user1889776

Смежные вопросы