gpt4 book ai didi

ruby-on-rails - acts_as_tree 并通过子标题将值传播到项目

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:12 25 4
gpt4 key购买 nike

我有一个有点复杂的模型,并且希望在我对 Rails 的有限理解的情况下获得完整的功能。

我有一个部分、一个标题(使用 acts_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 在层次结构中的更高层设置为 true,我将如何在 if 语句中执行检查它是否设置为 false?

编辑 - 还有更多 is_shippable 功能,如 is_fragile、is_custom_size 等......

最佳答案

我更倾向于在 Controller 中使用 before_filter 来修改嵌套项参数。

类似于:

before_filter :set_is_shippable, :only => [:update, :create]

def set_is_shippable
is_shippable = params[:section][:is_shippable]
params[:section][:items_attributes].each_with_index do |item, index|
unless item[:is_shippable]
params[:section][:items_attributes][index][:is_shippable] = is_shippable
end
end
end

关于ruby-on-rails - acts_as_tree 并通过子标题将值传播到项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9301813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com