Ruby on rails 我需要解释一下方法

Ruby on rails 我需要解释一下方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在试图弄清楚注入方法是如何工作的 有人能解释一下吗 def mysort if djeca.any? djeca.order(name: :asc).inject([]) { |sum, c| sum += c.mysort}.uniq else [self] end mysort是模型类Books 在控制器中,我调用方法mysort: @mybooks= Books.find_by(name: 'renesansa') @mybookss= @mybook

我正在试图弄清楚注入方法是如何工作的

有人能解释一下吗

def mysort
  if djeca.any?
      djeca.order(name: :asc).inject([]) { |sum, c| sum += c.mysort}.uniq
  else
      [self]
end
mysort
是模型类
Books

在控制器中,我调用方法mysort:

@mybooks= Books.find_by(name: 'renesansa')
@mybookss= @mybooks.leaf_wms

你应该点击这个链接

例如:

result = [1,2,3,4].inject(0) { |sum, number| sum + number }
这里,过程从
0
索引开始,到
3
索引。首先将
1和2
相加,得到两个值的和,并存储在
sum
变量(即sum=3)中,然后将
sum
值相加3,得到结果(即sum=6),依此类推。最后,您将得到类似
10
的结果

djeca.order(name: :asc).inject([]) { |sum, c| sum += c.mysort}.uniq
相当于

sum = []
djeca.order(name: :asc).each{|c| sum = sum + c.mysort}
sum.uniq
实际上,添加数组是非常困难的,因此您的代码只是将所有c.mysort附加到一个数组中

如果我理解正确,你也可以写:

djeca.order(name: :asc).map{|c| c.mysort}.flatten.uniq
根据你的受众,你可能想写一个或另一个。 注意,您不需要在注入块中为sum赋值,它是自动完成的

(1..10).inject(0){|mem,i| mem += i}
#=> 55

(1..10).inject(0){|mem,i| mem + i}
#=> 55
djeca.order(名称::asc)

检索活动记录数组

.注入([])

循环遍历每个活动记录。inject的初始输出为空数组[]

{sum,c}

c-每个活动记录


和-注入输出值。最初是[]。在每次迭代中,值都会附加到数组中。(sum+=[某些值]

此链接有很好的解释模型书是一本书的集合,还是一本书?模型应具有单数名称。再见。你的问题可能被否决,因为它没有表明你研究或试图研究这个主题。(看起来您完全跳过了搜索并询问了我们。)一个问题应该表明您在寻求帮助之前付出了一些努力。tnx对于您的回答,我不理解方法mysort中的c.mysort部分,我们称之为方法mysort。这是递归吗?