选择产品子产品和子子产品的最有效方法是什么?自我参照has_and_belongs_to_many协会

时间:2015-12-29 11:56:31

标签: ruby-on-rails ruby self-reference

我正在制作物料清单申请表。 产品可以是许多组件的一部分,并且具有许多子产品。 我有以下型号:

.ui-jqgrid .ui-jqgrid-htable th div { height: auto }

选择所有子产品很简单:

models/product.rb
has_many :sub_structure, primary_key: "produktnr", class_name: "Structure", foreign_key: "produktnr"
has_many :sub_products, through: :sub_structure, source: :product
has_many :structures, primary_key: "produktnr", class_name: "Structure", foreign_key: "delproduktnr"
has_many :assemblies, through: :structures, source: :assemblie

models/structre.rb
belongs_to :assemblie, primary_key: "produktnr", class_name: "Product", foreign_key: "produktnr"
belongs_to :product, primary_key: "produktnr", class_name: "Product", foreign_key: "delproduktnr"

但是,选择子产品的最有效方法是什么呢?它们是子产品吗?

类似的东西:

@product.sub_products

1 个答案:

答案 0 :(得分:0)

我肯定知道有更好更正确的做法,但几天前我遇到了同样的问题,我知道这不是很好,我必须适应你的情况,而我没有测试,但你去了:

$ debug_args_and_run echo a'"'b"'"c arg2
1:<echo> 2:<a"b'c> 3:<arg2> 
a"b'c arg2

$ bash -c "$(quote_args debug_args_and_run echo a'"'b"'"c arg2)"
1:<echo> 2:<a"b'c> 3:<arg2> 
a"b'c arg2

$ bash -c "$(quote_args debug_args_and_run bash -c "$(quote_args debug_args_and_run echo a'"'b"'"c arg2)")"
1:<bash> 2:<-c> 3:<'debug_args_and_run' 'echo' 'a"b'"'"'c' 'arg2'> 
1:<echo> 2:<a"b'c> 3:<arg2> 
a"b'c arg2

$ bash -c "$(quote_args debug_args_and_run bash -c "$(quote_args debug_args_and_run bash -c "$(quote_args debug_args_and_run echo a'"'b"'"c arg2)")")"
1:<bash> 2:<-c> 3:<'debug_args_and_run' 'bash' '-c' ''"'"'debug_args_and_run'"'"' '"'"'echo'"'"' '"'"'a"b'"'"'"'"'"'"'"'"'c'"'"' '"'"'arg2'"'"''> 
1:<bash> 2:<-c> 3:<'debug_args_and_run' 'echo' 'a"b'"'"'c' 'arg2'> 
1:<echo> 2:<a"b'c> 3:<arg2> 
a"b'c arg2

$ bash -c "$(quote_args debug_args_and_run bash -c "$(quote_args debug_args_and_run bash -c "$(quote_args debug_args_and_run bash -c "$(quote_args debug_args_and_run echo a'"'b"'"c arg2)")")")"
1:<bash> 2:<-c> 3:<'debug_args_and_run' 'bash' '-c' ''"'"'debug_args_and_run'"'"' '"'"'bash'"'"' '"'"'-c'"'"' '"'"''"'"'"'"'"'"'"'"'debug_args_and_run'"'"'"'"'"'"'"'"' '"'"'"'"'"'"'"'"'echo'"'"'"'"'"'"'"'"' '"'"'"'"'"'"'"'"'a"b'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'c'"'"'"'"'"'"'"'"' '"'"'"'"'"'"'"'"'arg2'"'"'"'"'"'"'"'"''"'"''> 
1:<bash> 2:<-c> 3:<'debug_args_and_run' 'bash' '-c' ''"'"'debug_args_and_run'"'"' '"'"'echo'"'"' '"'"'a"b'"'"'"'"'"'"'"'"'c'"'"' '"'"'arg2'"'"''> 
1:<bash> 2:<-c> 3:<'debug_args_and_run' 'echo' 'a"b'"'"'c' 'arg2'> 
1:<echo> 2:<a"b'c> 3:<arg2> 
a"b'c arg2