2012-04-02 7 views
0

私は従業員のスキルとスキルセットを示す内部アプリケーションを構築しています。しかし、私は膨大な量のデータに対処するのには苦労しています。私はこれを正しくやっているかどうか分からず、フィードバックがほしいと思う。Webアプリケーションの設計 - 複雑なデータを扱う

RailsでAPIを作成し、Backbone.jsを使用してその上に構築したいと思っていました。私はそれが良い学習体験となると思っていました。

しかし、私はここでたくさんのデータを扱っているので、Railsでそれを行うことはできませんでした。モデルやモデルの関係を通して私が気づいていたデータベーススキーマを再作成することに悩まされました。しかし、私が本当に好きではない、

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/CodeIgniterの中でオーバー開始しました:

は、おそらくそれは、それはこの質問の非常に重要な部分なので、ここでDBスキーマを投稿することをお勧めします私が取ったアプローチと私は本当にこれをRails/Backboneで始めたいと思います。 Rails/ActiveRecordでこれらの複雑なクエリを実行する方法はありますか?これにはどのように取り組んでいますか?

私のフロントページでは、すべての従業員を表示し、isotope.jsプラグインを使用して部門、スキル、スキルセットに基づいてフィルタリングすることができます。これはまた、最初のリクエストで多くのデータをロードする必要があることを意味します。私は1人の従業員のために、このように、今のところ一つの巨大な配列で、このデータのすべてを入れている:

[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 
    ) 

(。私はフィルタリングすることができますので、「クラスのインデックスが同位体のために必要とされる)

は、このAですまともなアプローチ(すべてのデータを1つのHUGE配列にロードする)、これをRailsで行うことができますか?あるいは、異なるデータに対して別々の要求を行う方がよいでしょうか?

私はまだPHPでこれに取り組んでいないか、別の試みのためにRailsに戻っていくかどうかはまだ決まっていないので、歓迎します。現時点では全体がちょっと不器用だと感じており、現時点では本当に楽しんでいるとは言えません。

おかげ

答えて

1

私は、あなたはまだPHPのコーダーのようなあまり考えだと思います。あなたは、レールが与える大会には参加しませんでした。あなたは外貨の名前をemployeeidと名付けましたが、それはemployee_idでなければなりません。これはphpのように手動でSQLクエリを構築しないため、これは本当に重要です。あなたはemployeeモデルあなたも追加すべきで

has_many :employeehasskills 

などを追加する必要があり、あなたのemployeeでそう

belongs_to :employee 
belongs_to :skill 

とあなたのskillモデル:あなたのemployeehasskillモデルでexanmpleのためには、以下の行を追加する必要があります。

has_many :skills, :through => :employeehasskills 

これは、レールでリレーションを定義する方法です。なぜなら、belongs_to :employeeのレールは、デフォルトで外部キーがemployee_idであることを待っていると言っているからです。これにより、次のことが可能になります。

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

これは従業員のスキルを返します。これは、phpではなく、それを学ぶ価値のあるアプローチです。 ActiveRecordの公式ドキュメントを読むことをお勧めします。http://api.rubyonrails.org/classes/ActiveRecord/Base.html

+0

レールのネーミングテーブルには規則がありますか?つまり、「従業員のハラスキル」は本当に駄目です。私は間違いなくドキュメントをチェックアウトし、おそらくこれをもう一度試してみます。再度、感謝します。 – cabaret

+0

そうだね!足場を使用する場合は、テーブルを自動でモデル名の複数形で名前を付ける必要があります!最初にスキャフォルダーに関する文書を読むことをお勧めします! – davidb

関連する問題