Ruby 关于 Rails 未定义的方法 `delete_at' for "John":String
Ruby on Rails undefined method `delete_at' for "John":String
我正在尝试用一组名称替换数据库中的一列名称。
我是 rails 上 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
students
应该是一个数组,但 students = player.first_name
使它成为一个字符串。
我不知道这是否是您想要的,但以下应该有效:
<% students = @players.pluck(:first_name) %> # or @players.map(&:first_name)
<% teams = RoundRobinTournament.schedule(students) %>
<td><%= teams %></td>
如果 @players
包含 ActiveRecord::Relation
,则使用 .pluck
;如果它是 Player
个对象的数组,则使用 .map
。
但是,错误会准确告诉您问题出在哪里。你只需要注意。该代码本来会更早崩溃,但 String
和 Array
都响应 .size
。
我正在尝试用一组名称替换数据库中的一列名称。 我是 rails 上 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
students
应该是一个数组,但 students = player.first_name
使它成为一个字符串。
我不知道这是否是您想要的,但以下应该有效:
<% students = @players.pluck(:first_name) %> # or @players.map(&:first_name)
<% teams = RoundRobinTournament.schedule(students) %>
<td><%= teams %></td>
如果 @players
包含 ActiveRecord::Relation
,则使用 .pluck
;如果它是 Player
个对象的数组,则使用 .map
。
但是,错误会准确告诉您问题出在哪里。你只需要注意。该代码本来会更早崩溃,但 String
和 Array
都响应 .size
。