在 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)
我正在尝试在模型中定义一个方法来简化我在控制器中所做的事情,如下所示:
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)