2013-05-08 91 views
-1

我是新来的红宝石和铁轨。我创建了一个使用acts_as_votable gem的rails应用程序。该宝石包含一个类我想用作我的应用程序模型的投票。可能吗?我试过使用rails g scaffold Vote。这样我得到了一个空的表决模型和适当的控制器和视图。但是,由于acts_as_votable已经创建了名为票的数据库表/votes显示了预先存在的投票而没有其属性。这同样适用于votes/new,由于新的Vote类为空,它没有显示任何输入字段。如何在导轨中使用gem类作为模型?

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

+0

告诉我们你已经尝试过了。 – 2013-05-08 11:40:41

+0

这看起来像是滥用宝石。为什么你想要在“投票”事件的背景之外创建投票?什么是用例? – 2013-05-08 13:07:40

+0

你是对的,这是一个滥用,但请记住,我是一个新手。当我有一个模型时,我更容易利用轨道功能,如脚手架,路由和验证,这就是为什么我想要这样做。 – batig 2013-05-08 13:41:00

回答

1

只要你在你的Gemfile宝石,你应该能够通过指定其命名空间访问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类中发生不可预知的变化。

0

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