我試圖根據包含對象名稱的字符串訪問對象。該對象是作用域的(我使用cancan來確保用戶只能訪問允許訪問的記錄)。我已經包含在其中,我有以下一些代碼:Rails從包含對象名稱的字符串訪問對象
operation_type:string, one of %w(add sub mult div)
left_operand_object:string
left_operand:string
right_operand_object:string
right_operand:string
def result
r = [access object using left_operand_object]
k = [access object using right_operand_object]
if operation_type == 'add'
r.instance_variable_get('@'+left_operand) + k.instance_variable_get('@'+left_operand)
elsif operation_type == 'sub'
r.instance_variable_get('@'+left_operand) - k.instance_variable_get('@'+left_operand)
...
end
於是,兩個問題:
- 我怎樣才能完成
r = [access object using left_operand_object]
線,讓我根據訪問範圍的對象的姓名字符串left_operand_object
? - 將
instance_variable_get
工作,如果left_operand
是customers.count
或者它只會工作沒有計數方法?
任何幫助非常感謝!
是的,你理解正確 - left_operand_object會像「客戶」。感謝您的信息,我會考慮使用constantize - 我認爲這將分配對象到r變量,如預期的那樣? –
我認爲第二個問題有點不清楚 - 我問我是否可以使用instance_variable_get中的count方法作爲整數返回count,但我認爲你的答案給了我需要去的方向 - left_operand會是像「sales.count」(假設我試圖使用customer.sales.count)。 –
我編輯了我的答案以允許「sales.count」 –