3

我刚刚完成了创建几个模型,并且不得不分别在1)Rails ActiveRecord 2)Rails数据库迁移和3)Backbone.js模型中分别编写它们的所有属性。我感觉不太干。我假设干掉这个问题的第一步是切换到node.js,我可以在后端和前端使用CoffeeScript(理想情况下重用相同的Backbone.js模型),但数据库模式又如何?我意识到我可以创建一个从模型属性中生成SQL的框架,但是在我开始这项工作之前,我想知道这样的事情是否已经存在或正在开发中。有没有一个框架只允许我定义一次模型?

如果这个框架可以统一视图和控制器,这样我就没有app/views,app/controllers,app/assets/javascripts/views,app/assets/javascripts/routers和像所有在不同地方定义类似的东西一样。

回答

0

退房Derbyactive development下的node.js框架,它试图统一视图和控制器(和更大量):

[德比]运行在服务器和浏览器相同的代码,并且它自动同步数据 。 Derby负责模板渲染,包装和模型视图绑定。由于所有功能都设计为 一起工作,因此不需要代码复制和粘合代码。

我正在与德比建立一个小型的爱好应用程序,到目前为止它已经很有趣并且具有挑战性。一个统一的新世界有自己的物理学..

有一点需要注意的是德比建于Racer,“实时模型同步引擎”之上;如果您期待像一个将Backbone.js,Express和某些数据库层缝合在一起的轻便胶水代码,您可能会发现它很“沉重”。


编辑:其他框架我还没看着密切:

+0

这正是我期待的那种东西,谢谢! – 2012-04-06 13:34:15

0

这是Wakanda系统的目标之一。

+0

这看起来很酷!你用过吗? – 2012-04-06 07:49:42

+0

我从来没有尝试过,因为我不相信这项技术。我只知道他的社区经理尝试我测试它:) – shingara 2012-04-06 07:52:00

0

对于模型,您可以简单地创建一个基类继承它。你只需要在派生类中调用set_table_name。我已经离开了这个。它的优点是可以调整派生类中的功能。例如:

应用/模型/ widget.rb:

class Widget < ActiveRecord::Base 
    def some_common_method 
     # ... 
    end 
end 

应用/模型/ blue_widget.rb:

class BlueWidget < Widget 
    set_table_name "blue_widgets" 
    # special methods, if any 
end 

对于迁移,只是定义一个函数为公共表列。例如:

def common_table_columns(t) 
    t.integer :id 
    t.stirng :some_string 
    # etc 
end 

create_table(:table1) { |t| common_table_columns(t) } 

[:table2,:table3,:table4].each do |name| 
    create_table(name) { |t| common_table_columns(t) } 
end 

create_table :table5 do |t| 
    common_table_columns(t) 
    t.string :extra 
end 

无法为Backbone.js的讲话(刚才),但我100%相信,可以实现同种的重复代码消除。 Javascript和Ruby一样具有动态性。

说了这么多,为什么你有几个相同的表?你是否在正确的问题上使用正确的解决方案?

+0

我一定不清楚。我没有创建类似的模型,我只是试图强调我必须在每个模型的3个位置上或多或少地声明相同的模型,并且正在寻找一种方法将其减少到一个位置。 – 2012-04-06 13:37:34