Дизайн веб-приложений - работа со сложными данными - PullRequest
0 голосов
/ 02 апреля 2012

Я создаю внутреннее приложение, которое показывает навыки и навыки наших сотрудников.Тем не менее, у меня есть проблемы с огромным количеством данных, которые входят в это.Я не уверен, что делаю это правильно, и мне бы очень хотелось получить обратную связь.

Я хотел создать API в Rails и построить на его основе 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, однако я немне действительно не нравится подход, который я выбрал, и я бы хотел начать с этого в Rails / Backbone.Есть ли способ выполнить эти сложные запросы в Rails / ActiveRecord и как бы я справился с этим лучше всего?

На моей главной странице я показываю всех сотрудников и могу фильтровать их по отделу, навыками набор навыков с помощью плагина isotope.js.Это также означает, что мне нужно загрузить много данных по первому запросу.На данный момент я поместил все эти данные в один огромный массив, например, для одного сотрудника:

[51] => Array
    (
        [id] => 51
        [name] => Name
        [firstname] => Firstname
        [description] => Multimedia developer
        [email] => firstname.name@company.com
        [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
    )

(Индекс 'class' необходим для изотопа, чтобы я мог фильтровать.)

Это достойный подход (загрузка всех данных в одном ОГРОМНОМ массиве), и смогу ли я сделать это в Rails?Или было бы лучше сделать отдельные запросы для разных данных?

Любые отзывы приветствуются, так как я до сих пор не решил, буду ли я продолжать работать над этим в PHP или переключусь обратно на Rails для другой попытки.В данный момент все выглядит неуклюже, и я не могу сказать, что мне действительно нравится работать над этим в данный момент.

Спасибо

1 Ответ

1 голос
/ 02 апреля 2012

Я думаю, вы все еще слишком много думаете, как php-кодер.Вы не присутствовали на конвенциях, которые дает рельсы.Вы назвали внешние ключи следующим образом: employeeid, но это должно быть employee_id, это действительно важно, потому что вы не создаете SQL-запросы вручную, как вы делаете это в php.Например, в вашей employeehasskill модели вам нужно добавить следующие строки:

belongs_to :employee
belongs_to :skill

Так что в вашей employee и вашей skill модели вам нужно добавить

has_many :employeehasskills

И в вашей employee модели вы также должны добавить:

has_many :skills, :through => :employeehasskills

Это способ определения отношений в рельсах.Важно соблюдать соглашения, потому что, если вы скажете belongs_to :employee rails, по умолчанию ожидает, что ваш внешний ключ будет employee_id.Это позволит вам сделать следующее:

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

Это вернет навыки сотрудника.Это совсем другой подход к php, но его стоит изучить.Я бы предложил вам прочитать официальную документацию ActiveRecord: http://api.rubyonrails.org/classes/ActiveRecord/Base.html

...