Ruby on rails Ruby中的动态方法调用
我从一个表单中被传递了一个参数,如下所示Ruby on rails Ruby中的动态方法调用,ruby-on-rails,ruby,Ruby On Rails,Ruby,我从一个表单中被传递了一个参数,如下所示 area => "Time logs" 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_exp
area => "Time logs"
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"}
然后在用户模型上动态调用该方法,因此我在控制器中只得到一行。我猜,但差不多
employee.send("purge"+area_hash[area])
??您很接近:
employee.send("purge_#{area_hash[area]}")
你应该考虑使用PuxyPoto避免在不知道的情况下调用私有方法:
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])
你很接近:
employee.send("purge_#{area_hash[area]}")
你应该考虑使用PuxyPoto避免在不知道的情况下调用私有方法:
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])
当
area\u hash
不包含params[:area]
值时,不要忘记提供案例;当area\u hash
不包含params[:area]
值时,不要忘记提供案例。您尝试过最后一行了吗?您尝试过最后一行了吗?