在控制器内动态调用方法

sam*_*207 2 ruby methods eval ruby-on-rails

我有以下场景

我想动态地向控制器添加方法.我的所有方法名都在一个表中.请参考以下示例

-table (method_names)-

1 - Walk
2 - Speek
3 - Run
Run Code Online (Sandbox Code Playgroud)

我有一个控制器

class UsersController < ApplicationController

   def index

   end 

end
Run Code Online (Sandbox Code Playgroud)

在这个索引动作中,我想动态调用我的方法.那些方法实际上是在其他方面实现的

我有另一个控制器

class ActionImplementController < ApplicationController

   def walk
     puts "I'm walking"
   end 

   def speek
     puts "I'm sppeking"
   end 

   def run
     puts "I'm running"
   end 


end  
Run Code Online (Sandbox Code Playgroud)

**我做过类似下面的事情并且正在努力

class UsersController < ApplicationController

   def index
     a = eval("ActionImplementController.new.run")
   end 

end
Run Code Online (Sandbox Code Playgroud)

但我的问题是,这是正确的方式还是有其他方法来做到这一点

提前致谢

干杯

sameera

nat*_*vda 5

虽然第一个答案有效,但我更喜欢这样的事情

module ImplementsActions
  def run
    ...
  end

  def walk
    ..
  end

  def ...
end
Run Code Online (Sandbox Code Playgroud)

然后在你的控制器写

class UsersController < ActionController::Base

  include ImplementsActions

  # now you can just use run/speek/walk

  def index
    run
  end
end
Run Code Online (Sandbox Code Playgroud)

更清洁,因为代码可以共享,但它是在您需要的地方定义的.