Как я могу объединить два массива? Что-то вроде этого:
@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).merge(@movie)
Но это не сработает.
В @options Мне нужен массив с четырьмя элементами включает @movie.
Как я могу объединить два массива? Что-то вроде этого:
@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).merge(@movie)
Но это не сработает.
В @options Мне нужен массив с четырьмя элементами включает @movie.
Как это?
⚡️ irb
2.2.2 :001 > [1,2,3] + [4,5,6]
=> [1, 2, 3, 4, 5, 6]
Но у вас нет 2 массивов.
Вы можете сделать что-то вроде:
@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).to_a << @movie
На этот вопрос две части:
Как "объединить два массива"? Просто используйте метод +:
[1,2,3] + [2,3,4]
=> [1, 2, 3, 2, 3, 4]
Как сделать то, что вы хотите? (Который, как оказалось, не объединяет два массива.) Пусть сначала разрушит эту проблему:
@movie - это экземпляр вашей модели Movie, которую вы можете проверить с помощью @movie.class.name.
@options является Array, который вы можете проверить с помощью @options.class.name.
Теперь вам нужно знать, как добавить новый элемент в массив (т.е. добавить ваш элемент @movie в массив @options)
Вы делаете это с помощью двойной лопаты:
@options << @movie
это по существу то же самое, что и:
[1,2,3] << 4
=> [1,2,3,4]
@movie не является массивом в вашем примере, это всего лишь один экземпляр фильма. Это должно решить вашу проблему:
@options << @movie
Ну, если у вас есть элемент для объединения в массив, вы можете использовать <<:
Eg: array = ["a", "b", "c"], element = "d"
array << element
=> ["a", "b", "c", "d"]
Или, если у вас есть два массива и вы хотите дублировать, используйте += или просто + на основе ваших требований по требованиям к изменяемости:
Eg: array_1 = [1, 2], array_2 = [2, 3]
array_1 += array_2
=> [1, 2, 2, 3]
Или, если у вас есть два массива и вы хотите игнорировать дубликаты, используйте |= или просто |:
Eg: array_1 = [1, 2], array_2 = [2, 3]
array_1 |= array_2
=> [1, 2, 3]