У меня немного сложная модель, и я хочу получить полную функциональность с моим ограниченным пониманием рельсов.
У меня есть раздел, заголовок (который использует act_as_tree) и элемент.
Я использую json для ввода наборов данных. Это сработало очень хорошо. Я хотел бы иметь возможность вводить атрибуты для целых наборов данных, таких как 'is_shippable'. Я хотел бы иметь возможность указать в любом месте дерева значение is_shippable и установить значение true. Кроме того, я хотел бы иметь возможность переопределить на уровне заголовка или элемента, чтобы установить его в false.
Я решил, что имеет смысл иметь is_shippable в качестве атрибута для раздела, заголовка и элемента и попытаться использовать обратный вызов before_create, чтобы определить, должен ли он быть is_shippable.
Например:
section
header -acts_as_tree
item - is_shippable
образец JSON:
{
"name":"sample section",
"is_shippable": true,
"headers_attributes":[
{
"name":"sample_section"
"items_attributes":[{
"name":"sample item",
"is_shippable":false,
}
]
}
]
}
в header.rb
before_save :default_values
private
def default_values
self.is_shippable ||=self.section.is_shippable
# need to be able to set header to is_shippable=false if specified explicitly at that level
end
в item.rb
before_save :default_values
private
def default_values
# if not set, default to 0
self.is_shippable ||= 0
self.is_shippable=1 if self.header.is_shippable==true
# need to be able to set item to is_shippable=false if specified explicitly at that level
end
Есть ли лучший способ сделать это, чем я? Как мне выполнить, если в инструкциях проверяется, установлено ли для is_shippable значение false, если в иерархии установлено значение true выше?
РЕДАКТИРОВАТЬ - также есть другие функции, которые is_shippable, такие как is_fragile, is_custom_size и т.д ...