Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby中的动态方法调用_Ruby On Rails_Ruby - Fatal编程技术网

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]
值时,不要忘记提供案例。您尝试过最后一行了吗?您尝试过最后一行了吗?