Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 On Rails_Ruby_Design Patterns - Fatal编程技术网

Ruby on rails 不同的操作取决于传递的参数:选择的最佳模式

Ruby on rails 不同的操作取决于传递的参数:选择的最佳模式,ruby-on-rails,ruby,design-patterns,Ruby On Rails,Ruby,Design Patterns,很多时候,我希望一个方法根据参数做一件事或另一件事。鉴于这一类别: class SendMailJob def initialize(action_to_perform, user) self.send(action_to_perform.to_s, args) end private def feedback(user) puts "We send feedback email #{user}" end def any_help(user)

很多时候,我希望一个方法根据参数做一件事或另一件事。鉴于这一类别:

class SendMailJob 
  def initialize(action_to_perform, user)
    self.send(action_to_perform.to_s, args)
  end

  private
  def feedback(user)
    puts "We send feedback email #{user}"
  end
  def any_help(user)
    puts "We send any_help email #{user}"
  end
end
根据我想做什么,我用一个带有选项的符号来称呼它:

SendMailJob.new(:feedback, @user)

有更好的方法吗?

以更面向对象的设计模式,您应该将这些方法委托给子类

class SendMailJob
  def initialize(user)
    do_action user
  end
end 

class FeedbackJob < SendMailJob
  def do_action(user)
    puts "We send feedback email #{user}"
  end
end
类SendMailJob
def初始化(用户)
do_action用户
结束
结束
类FeedbackJob

但是有了编程的强大功能,使用“send”更为方便,除非您想分离一些逻辑

我认为您的解决方案是合理的(正如lx00st的答案),但我认为我可能会使用静态方法(类方法)而不是您发布的用例

class SendMailJob
  def self.feedback(user)
    puts "We send feedback email #{user}"
  end

  def self.any_help(user)
    puts "We send feedback email #{user}"
  end
end

SendMailJob.feedback(@user)