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

时间:2016-11-30 08:50:07

标签: ruby-on-rails methods model helpers

我试图在模型中定义一个方法,以简化我在控制器中执行的操作,如下所示:

模型/ game.rb

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

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

games_controller.rb

@wordsArray = @game.build_array_for(red_words)

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

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

  

未定义的局部变量或方法`red_words'对于GamesController

如果我将方法构建为:

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

它有效,但由于我将其与其他属性一起用于同一目的,因此无法理解。

我在这里缺少的是,参数是否作为字符串传递,并且由于某种原因无法识别属性的名称?

2 个答案:

答案 0 :(得分:3)

如果您需要现有列的构建数组,那么您可以尝试:

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)

答案 1 :(得分:0)

将方法更改为

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

当您使用self rails时,会尝试为words对象

找到属性words或实例方法Game

修改

相应地进行此更改

<强> games_controller.rb

@wordsArray = @game.build_array_for(red_words)

<强>模型/ game.rb

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