![](/img/trans.png)
[英]Ruby reverse.each_with_index and delete_at causing problems in latest Ruby/Rails
[英]Ruby on Rails undefined method `delete_at' for "John":String
我正在嘗試從數據庫中替換一列名稱的名稱數組。 我是軌道上 Ruby 的新手,所以它可能很簡單。
這工作正常:
<% students = %w(John Paul Ringo George) %>
<% teams = RoundRobinTournament.schedule(students) %>
<td><%= teams %></td>
這我得到一個錯誤:
<% @players.each do |player| %>
<% students = player.first_name %>
<% teams = RoundRobinTournament.schedule(students) %>
<td><%= teams %></td>
錯誤:
undefined method `delete_at' for "John":String
Did you mean? delete
delete!
在 RoundRobinModule 中的“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
student 應該是一個數組,但students
students = player.first_name
使它成為一個字符串。
我不知道這是否是你想要的,但以下應該有效:
<% students = @players.pluck(:first_name) %> # or @players.map(&:first_name)
<% teams = RoundRobinTournament.schedule(students) %>
<td><%= teams %></td>
如果.pluck
擁有一個ActiveRecord::Relation
或.map
如果它是一組Player
對象,則使用@players
。
但是,該錯誤會准確地告訴您問題所在和位置。 你只需要注意。 會更早崩潰,但String
和Array
都響應.size
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.