2012-04-02 127 views
0

我正在构建一个内部应用程序,显示我们员工的技能和技能组合。但是,我无法处理大量的数据。我不确定我是否以正确的方式做这件事,我真的很想得到一些反馈。Web应用程序设计 - 处理复杂数据

我想在Rails中创建API,并在Backbone.js基础上构建API,因为我认为这将是一次很好的学习体验,而且我希望它能够非常灵敏和流畅,所以这些技术似乎很合适。

但是,由于我在这里处理大量数据,所以我无法在Rails中完成它。我有点被卡在重新创建数据库模式,我想通过我的模型和模型关系。

也许这是一个好主意,在这里发表了DB模式,因为它是这个问题的非常重要的组成部分:

employee   skill    skillset   department 
--------   ------   --------   ---------- 
id     id    id     id 
name    name    name    name 
firstname 
description 
email 
departmentid 


departmenthasskillset    employeehasskill 
---------------------    ---------------- 
departmentid      employeeid 
skillsetid       skillid 
            rating 

skillsethasskill 
---------------- 
skillsetid 
skillid 

我在PHP /笨以来开始了,但我真的不喜欢我采取的方法,我真的很想从Rails/Backbone开始。有没有办法在Rails/ActiveRecord中完成这些复杂的查询,我将如何解决这个问题呢?

在我的首页上,我展示了所有员工,我可以根据部门,技能和技能与isotope.js插件进行筛选。这也意味着我需要在第一个请求中加载大量数据。我现在已经把所有的数据在一个巨大的阵列,像这样的一个员工:(需要对同位素的“类”指数,所以我可以过滤)

[51] => Array 
    (
     [id] => 51 
     [name] => Name 
     [firstname] => Firstname 
     [description] => Multimedia developer 
     [email] => [email protected] 
     [departmentid] => 9 
     [skills] => Array 
      (
       [html] => 3 
       [css] => 3 
       [javascript] => 3 
       [jquery] => 3 
       [php] => 2 
      ) 

     [skillsets] => Array 
      (
       [1] => frontend 
       [2] => backend 
      ) 

     [department] => development 
     [class] => html css javascript jquery php frontend backend development 
    ) 

这是一个体面的方法(将所有数据加载到一个巨大的数组中),并且我能在Rails中完成这项工作吗?或者,为不同的数据分别请求会更好吗?

欢迎任何反馈,因为我还没有决定是否继续在PHP中处理此问题,或者切换回Rails进行其他尝试。整件事现在感觉很笨拙,我不能说我现在真的很喜欢它。

谢谢

回答

1

我觉得你仍然想太多像一个PHP编码器。你没有参加轨道交会的惯例。你这样命名外键:employeeid但它应该是employee_id这是非常重要的,因为你不像在php中那样手动构建sql查询。对于您employeehasskill模型exanmple你需要添加下面几行:

belongs_to :employee 
belongs_to :skill 

所以在你employee和你skill模型,你需要添加

has_many :employeehasskills 

而在你employee模型,你还应该加上:

has_many :skills, :through => :employeehasskills 

这是你定义轨关系的方式。遵守惯例很重要,因为如果您说默认等待您的外键为employee_id。这将使您能够执行以下操作:

e=Employee.find(<the id here>) 
e.skills 

这将返回员工的技能。这是一种不同于PHP的方法,但它值得学习。我建议你阅读ActiveRecord的官方文档:http://api.rubyonrails.org/classes/ActiveRecord/Base.html

+0

在rails中命名表是否有约定?我的意思是,'employeehasskills'的声音真的很糟糕。我一定会检查一下文档,也许再试一次。再次感谢。 – cabaret 2012-04-02 09:15:35

+0

是的,真的!如果你使用脚手架你应该做什么,表格会自动命名为模型名称的复数形式!我建议你先阅读关于脚手架的文档! – davidb 2012-04-02 10:43:42