2016-11-30 91 views
0

我想在一個模型中定義的方法來簡化事情我做在我的控制器如下:的方法傳遞一個屬性名作爲參數不是Rails的工作

模式/遊戲。 RB

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

我打電話控制器的方法如下

games_controller.rb

@wordsArray = @game.build_array_for(red_words) 

注意「red_words」是哪個值應該是一個字符串

遊戲的實例的屬性,當我調用該方法獲得:

未定義的局部變量或方法`red_words 「對於GamesController

如果我建的方法:

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

它的作品,但因爲我用它與其他屬性用於相同的目的,它是沒有意義的。

我在這裏錯過了什麼,是否可以將參數作爲字符串傳遞,並且由於某種原因而不能識別屬性的名稱?

回答

1

如果你需要建立存在列數組,那麼你可以試試這個:

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) 
+0

沒有運氣亞歷克斯,兩個替代品在相同的錯誤 – Andrew

+0

這樣稱呼它像這樣'@wordsArray = @ game.build_array_for(:red_words)' –

+0

這是偉大的亞歷克斯它現在工作很好。非常感謝你的幫助! – Andrew

0

更改方法

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

當您使用self軌將試圖找到一個屬性words或實例方法wordsGame對象

編輯

使此相應地改變

games_controller.rb

@wordsArray = @game.build_array_for(red_words) 

型號/ game.rb

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

的結果是一樣的。我認爲在Ruby中使用'self'還是一樣?在這兩種情況下,都試圖找到一個實例方法,它爲Game對象提供參數'words'的值。 在這兩種情況下,我都會得到「未定義的局部變量或方法'red_words'」 – Andrew

+0

如果它不是「屬性」或「關聯」,則必須將它作爲參數 –

+0

傳遞,請確保您傳遞的參數是方法調用並接受參數在方法 –