2014-02-01 5 views
2

Я использую рубин 2, рельсы 4, и Mongoid рельсы гемИспользование записи делегации с Mongoid Rails и Ruby,

У меня есть две модели:

class Product 
    embeds_one :feature 
end 

class Feature 
    embedded_in :product 

    field :color, type: String 
end 

Допустим, у меня есть продукт:

p = Product.new 

Я хочу, чтобы быть в состоянии назвать что-то вроде:

p.color = "blue" 

вместо того, чтобы сделать:

p.feature.color = "blue" 

то же самое для заходящих атрибутов:

p.color 
=> "blue" 

по сравнению с менее идеальной (и текущей ситуации)

p.feature.color 
=> "blue" 

Я знаю, что с активным записи, вы можете использовать делегаций, но как бы установить это в mongoid, не заполняя мою модель множеством методов, ссылающихся на модель функций?

ответ

6

delegate метод не ограничивается активной записи - она ​​поставляется с Active Support, и может быть использовано по любому классу делегировать любой метод к любым внутренним объектам:

require 'active_support/all' 
class A 
    def initialize(a) 
    @a = a 
    end 
    delegate :+, to: :@a 
end 

A.new(2) + 4  #=> 6 

Таким образом, вы можете использовать его, а также для вашего моделей. Просто не забудьте добавить allow_nil: true, чтобы он не выдавал исключение, если у него нет функции.

class Product 
    embeds_one :feature 

    delegate :color, to: :feature, allow_nil: true 
end 

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

  • Нет связанных вопросов^_^