#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. Не беспокойтесь. Пожалуйста.