2016-11-11 54 views
1

我有一個看起來像這樣的方法:如何將變量中存儲的值用作方法調用?

> rating 
=> "speed" 

然後,我有一個電話,看起來像這樣:

profile.ratings.find_by(user: current_user).speed 

我想要做的是rating值傳遞給該呼叫。

但是,當我這樣做:

profile.ratings.find_by(user: current_user).rating 

它不工作,因爲沒有每個ratings對象上調用rating方法。

這是我的錯誤,當我運行上面:

Rating Load (4.5ms) SELECT "ratings".* FROM "ratings" WHERE "ratings"."profile_id" = $1 AND "ratings"."user_id" = 7 LIMIT $2 [["profile_id", 12], ["LIMIT", 1]] 
NoMethodError: undefined method `rating' for #<Rating:0x007fca0c4fba90> 

我通常會做串插,除了現在我上的方法調用工作。

我該怎麼做?

回答

4

如果你正在尋找他們提供了一個簡單的訪問ActiveRecord模型訪問屬性:

profile.ratings.find_by(user: current_user)[rating] 

這比自send方法更安全它只會獲取屬性。如果您有一種叫做ban_and_charge_ten_bucks!的方法,某些惡意用戶可能會讓您的系統調用,如果您撥打send而不檢查您打電話的內容。

+0

好點。我更喜歡這種方法。謝謝你的提示! – marcamillion

2

可以使用send method

profile.ratings.find_by(user: current_user).send(rating) 
+1

值得注意的是,如果這是用戶數據,**不要**隨意執行它。爲了安全起見,最好有一個允許的方法的白名單。 – tadman

+0

@tadman這就是我正在做的....我有一個接受的輸入數組,我正在迭代。我只需要能夠相應地執行。 – marcamillion

+0

如果方法名稱在你的控制之下,那麼你在這裏很好。小心一點。這就是CVN的製作方式。 – tadman

相關問題