-1

我是 ruby​​ 和 rails 的新手。我创建了一个使用acts_as_votable gem的rails 应用程序。gem 包含一个 Vote 类,我想将其用作我的应用程序的模型。可能吗?

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

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

4

2 回答 2

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在升级时保护您免受课程中不可预测的变化。

于 2013-05-08T11:33:36.117 回答
0

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

于 2013-05-08T11:30:58.273 回答