在 Rails 中不起作用的方法中将属性名称作为参数传递

Passing an attribute name as an argument in a method not working in Rails

我正在尝试在模型中定义一个方法来简化我在控制器中所做的事情,如下所示:

models/game.rb

def build_array_for(words)
  words.downcase.split(",")
end

我在控制器中调用方法如下

games_controller.rb

@wordsArray = @game.build_array_for(red_words)

请注意 'red_words' 是 Game 实例的一个属性,其值应该是一个字符串

当我调用方法时,我得到:

undefined local variable or method `red_words' for GamesController

如果我将方法构建为:

def build_array
  red_words.downcase.split(",")
end

它可以工作,但由于我将它与其他属性一起用于相同目的,所以它没有意义。

我在这里遗漏了什么,会不会是参数作为字符串传递并且由于某种原因无法识别属性的名称?

将方法改为

def build_array_for(words)
  words.downcase.split(",")
end

当您使用 self 时,rails 将尝试为 Game 对象

查找属性 words 或实例方法 words

编辑

进行相应的更改

games_controller.rb

@wordsArray = @game.build_array_for(red_words)

models/game.rb

def build_array(red_words)
  red_words.downcase.split(",")
end

如果您需要为现有列构建数组,那么您可以试试这个:

def build_array_for(column)
  self[column].downcase.split(",")
end

如果你想为任何实例变量构建数组,当:

def build_array_for(name)
  self.send(name).downcase.split(",")
end

使用符号或字符串作为参数:

@wordsArray = @game.build_array_for(:red_words)