Ruby on Rails неопределенный метод `delete_at’ для «Джона»:Строка

#ruby-on-rails #round-robin

#рубин на рельсах #циклический

Вопрос:

Я пытаюсь заменить массив имен на столбец имен из базы данных. Я новичок в Ruby on rails, так что это может быть что-то простое.

Это прекрасно работает:

 lt;% students = %w(John Paul Ringo George) %gt; lt;% teams = RoundRobinTournament.schedule(students) %gt; lt;tdgt;lt;%= teams %gt;lt;/tdgt;  

Это я получаю ошибку:

 lt;% @players.each do |player| %gt; lt;% students = player.first_name %gt; lt;% teams = RoundRobinTournament.schedule(students) %gt; lt;tdgt;lt;%= teams %gt;lt;/tdgt;  

Ошибка:

 undefined method `delete_at' for "John":String Did you mean? delete  delete!  

В RoundRobinМодуле «delete_at», что вызывает ошибку:

 require 'round_robin_tournament/version'  module RoundRobinTournament  def self.schedule(array)  array.push(nil) if array.size.odd?  n = array.size  1.step(n / 2, 1).each do |i|  array.insert(n - i, array.delete_at(i))  end  pivot = array.pop  games = (n - 1).times.map do  day = [[array.first, pivot]]   (1...(n / 2)).map { |j| [array[j], array[n - 1 - j]] }  array.rotate!  day  end  array.push pivot unless pivot.nil?  games  end  end  

Ответ №1:

students предполагается, что это массив, но students = player.first_name делает его строкой.

Я не знаю, хотите ли вы этого, но должно сработать следующее:

 lt;% students = @players.pluck(:first_name) %gt; # or @players.map(amp;:first_name) lt;% teams = RoundRobinTournament.schedule(students) %gt; lt;tdgt;lt;%= teams %gt;lt;/tdgt;  

Используйте .pluck , если @players содержит ActiveRecord::Relation или .map если это массив Player объектов.

Но ошибка точно сообщает вам, в чем и где проблема. Вам просто нужно быть внимательным. Код бы рухнул раньше, но String и Array то, и другое, и на это реагирует .size .

Комментарии:

1. Я чувствую себя глупым разваном. Это работает!!!! Оба, спасибо вам!!!

2. Не беспокойтесь. Пожалуйста.