0

Предположит, у меня есть два класса, как следующее:Rails 4: Можно ли удалить вызов вложенной модели?

# has attribute name 
class Foo 
    accepts_nested_attributes_for :bar 
end 

# has attribute bing 
class Bar 

end 

Возможно ли в Rails, чтобы как-то легко удалить необходимость вызова атрибутов, относящиеся к вложенному классу (в данном случае Bar). То есть, можно ли сделать следующее?

my_foo.name 
my_foo.bing 

Я бы нужно создать методы экземпляра для каждого атрибута в BarFoo?

Кроме того, возможно ли создать новое отношение, настроенное таким образом, без необходимости передавать явные параметры хэша?

my_foo = Foo.new(name: "my_foo_name", bing: "my_foo.bar.bing") 

Заранее спасибо за любую помощь с этим

ответ

1

Вы должны быть в состоянии сделать это с помощью delegate метода.

Для определенной ассоциации bar, делегат поглотитель name атрибута bar:

class Foo < ActiveRecord::Base 
    has_one :bar 
    delegate :name, to: :bar 
end 

Что касается вашего второго вопроса, то да, вы можете делегировать сеттеров name= и bing= к bar, как показано выше. Вы должны убедиться, что связанный объект создан до назначения, иначе вы получите ошибку «Неопределенный метод ... для NilClass».

Для получения дополнительной информации см. Ссылку delegate documentation.

+0

Спасибо, это именно то, что я искал, я не могу проголосовать за вас достаточно! Я хотел бы добавить, что я использую [немного менее известный] 'after_initialize' обратный вызов в моей модели, чтобы гарантировать, что мой связанный объект доступен – DazBaldwin

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