Cro*_*ton 17 ruby orm ruby-on-rails ruby-on-rails-4
如何合并两个数组?像这样的东西:
@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).merge(@movie)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
在@options
我需要一个包含四个元素的数组@movie
.
Nic*_*eys 39
像这样?
?? irb
2.2.2 :001 > [1,2,3] + [4,5,6]
=> [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
但是你没有2个阵列.
你可以这样做:
@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).to_a << @movie
Run Code Online (Sandbox Code Playgroud)
这个问题分为两个部分:
如何"合并两个阵列"?只需使用+
方法:
[1,2,3] + [2,3,4]
=> [1, 2, 3, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)怎么做你想要的?(事实证明,这并没有合并两个数组.)让我们首先解决这个问题:
@movie
是您的Movie
模型的一个实例,您可以使用该实例进行验证@movie.class.name
.
@options
是一个Array
,您可以验证@options.class.name
.
您现在需要知道的是如何将新项目附加到数组(即,将您的@movie
项目附加到@options
数组)
你用双铲子做到了:
@options << @movie
Run Code Online (Sandbox Code Playgroud)
这基本上与以下内容相同:
[1,2,3] << 4
=> [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)合并(合并)数组:
[1, 2, 3].union([2, 4, 6]) #=> [1, 2, 3, 4, 6] (FROM RUBY 2.6)
[1, 2, 3] | [2, 4, 6] #=> [1, 2, 3, 4, 6]
Run Code Online (Sandbox Code Playgroud)
连接数组:
[1, 2, 3].concat([2, 4, 6]) #=> [1, 2, 3, 2, 4, 6] (FROM RUBY 2.6)
[1, 2, 3] + [2, 4, 6] #=> [1, 2, 3, 2, 4, 6]
Run Code Online (Sandbox Code Playgroud)
向数组添加元素:
[1, 2, 3] << 4 #=> [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
但似乎您没有数组,而是活动记录。您可以使用 将其转换为数组to_a
,但您也可以直接执行以下操作:
Movie.order("RANDOM()").first(3) + [@movie]
Run Code Online (Sandbox Code Playgroud)
它返回你想要的数组。