在Rails上实例化子类Ruby的正确方法

时间:2018-05-29 20:16:37

标签: ruby-on-rails ruby ruby-on-rails-5

我有3个课程,其中父母是Messenger,如此:

class Messenger
    #methods defined here:
end

class Email < Messenger
    #send email and other email related stuff
end

class Sms < Messenger
    #send text messages and other related stuff
end

在我的Rails控制器中,我想要实例化新的电子邮件或短信对象,并通过适当的消息传递通道发送消息。我如何设置我的require语句?我主要熟悉Java,所以我通常只是导入类,但我不确定Ruby的正确方法。

我之前把这三行放在了控制器的顶部:

require "#{Rails.root}/lib/classes/email.rb"
require "#{Rails.root}/lib/classes/sms.rb" 
require "#{Rails.root}/lib/classes/messenger.rb" 

提前致谢。

1 个答案:

答案 0 :(得分:4)

也许您应该考虑将这些内容放在messengers下名为app的目录中,例如:

- app
  |- messengers
     |- messenger_base.rb
     |- email_messenger.rb
     |- sms_messenger.rb

然后定义您的类,如:

class MessengerBase
  #methods defined here:
end

class EmailMessenger < MessengerBase
  #send email and other email related stuff
end

class SmsMessenger < MessengerBase
  #send text messages and other related stuff
end

IMO,像EmailMessenger这样的名称比Email更清晰。有了这个,自动加载应该可以正常工作,不需要require语句。