如何将gem类用作rails中的模型?

时间:2013-05-08 11:16:36

标签: ruby-on-rails ruby model gem

我是ruby和rails的新手。我创建了一个使用acts_as_votable gem的rails应用。 gem包含一个类投票,我想用它作为我的应用程序的模型。有可能吗?

我尝试过使用rails g scaffold Vote。这样我得到了一个空的投票模型和适当的控制器和视图。但是,因为acts_as_votable已经创建了一个名为votes /votes的数据库表,显示了预先存在的投票而没有它们的属性。这同样适用于votes/new,它没有显示任何输入字段,因为新的投票类是空的。

我还想过在我的应用程序中复制gem类,但我知道这是一个可怕的想法。

2 个答案:

答案 0 :(得分:1)

只要你的Gemfile中有gem,你就可以通过指定它的命名空间来访问Vote类:

ActsAsVotable::Vote

因此,您可以在使用其他模型时使用它。

也可以对类进行修补,例如在初始化程序中:

ActsAsVotable::Vote.send( :include, MyModule )

然后在另一个文件中:

module MyModule
  extend ActiveSupport::Concern

  included do
    # class eval any macro you want...
  end

  module ClassMethods
    def foo
      # define class methods...
    end
  end

  def bar
    # define instance methods...
  end
end

但是,我建议不要这样做。在您不拥有的类上构建业务逻辑的整个部分是危险的,并且不能直接使用!只要您添加次要功能,它就可以了,但如果您确实需要自定义行为,请继续并重新实现各种各样的'acts_as_votable`功能。

这不是那么困难也不长,你将拥有自己的逻辑,这将使你在升级时屏蔽Vote类中不可预测的变化。

答案 1 :(得分:0)

您可以尝试将其与ActsAsVotable::Vote一起使用,但我认为它应该与现有模型结合使用。