我正按照以下
从表单传递参数area => "Time logs"
user_id => "21"
或
area => "Expense management"
user_id => "21"
此参数用于确定要从系统中清除的用户数据区域。
然后我的控制器中有什么
area = params[:area]
user = User.find(params[:user_id])
case area
when "Time logs"
user.purge_time_log_data
when "Expense management"
user.purge_expense_data
end
因此,用户从表单中提供区域和员工,然后通过调用模型上的方法清除该区域的数据。然而,实际上我实际上可能有十个方面,而且我不想在控制器中有大量列表。我不能使参数与方法名称匹配,但有没有办法可以做一些事情,比如创建一个哈希来翻译区域,比如
area_hash = {"Expense management" => "expense_data", "Time logs" => "time_log_data"}
然后动态调用用户模型上的方法,所以我最终在控制器中输入了1行。我猜,但是像
employee.send("purge"+area_hash[area])
????
答案 0 :(得分:4)
你很近:
employee.send("purge_#{area_hash[area]}")
你应该考虑使用public_send来避免在没有意识到的情况下调用私有方法:
employee.public_send("purge_#{area_hash[area]}")
发送使用符号,以便您可以这样做:
area_hash = {"Expense management" => :purge_expense_data, "Time logs" => :purge_time_log_data}
employee.public_send(area_hash[area])