|
|
|
BobiKK |
|
|||
Опытный Профиль Группа: Участник Сообщений: 655 Регистрация: 1.12.2005 Где: Essen, Deutschlan d Репутация: нет Всего: 16 |
В двух словах задача:
придумать структуру БД для многоязычного каталога алкогольной продукции Посидев немного и пораскинув мозжечком получается что-то вроде этого:
Я с рельсами только знакомлюсь и пока не нахожу возможности задать отношение belongs_to :taste или :country в модели Wine. Связывание должно по идее происходить так: wines.id_taste = tastes.id_taste AND language_id = 1. Т.е. запись идентифицируется по 2 ключам Реализовать это в рельсах, я так понял, трудновато. Как адаптировать структуру под рельсы? Вариант типа разделить tastes на 2 таблицы (1ая: `id`, 2ая, `taste_id`, `language_id`, `description`) возможно бы и прокатил, но городить лишнюю таблицу ради одного поля как-то не хочется |
|||
|
||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
А нафига в таблице countries два(id и country_id) "первичных" ключа, что за дикий изврат такой?
Ты можешь указать несколько объявлений belongs_to для модели типа:
Поэтому я не понял в чём возникла сложность? -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
BobiKK |
|
|||
Опытный Профиль Группа: Участник Сообщений: 655 Регистрация: 1.12.2005 Где: Essen, Deutschlan d Репутация: нет Всего: 16 |
Вот что под этим подразумевалось
belongs_to :tastes будет работать, если связывание идет по `id`. У меня же не `taste_id` |
|||
|
||||
source777 |
|
||||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
P.S. Мне кажется легче было бы организовать мультилингвальность путём использования разных таблиц для разных языков, отличающихся языковым префиксом, тогда переход между языками будет осуществляться к примеру так:
Можно также настроить автоматическую смену языка на базе routes, путём установки нужного префикса таблиц, в зависимости от части URL, или даже поддомена... -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||||
|
|||||||
shine |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 137 Регистрация: 20.10.2006 Репутация: нет Всего: 5 |
1)Та же проблема о которой говорил source777 и для таблицы tastes: поле tastes_id не нужно
2)Для языков 11 позиций много. 3 хватит с головой. Для года создания вина хватит 4 позиции. 3)Файлы рисунков лучше хранить все-таки не в БД, а в ФС. --------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin |
|||
|
||||
BobiKK |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 655 Регистрация: 1.12.2005 Где: Essen, Deutschlan d Репутация: нет Всего: 16 |
По умолчанию, если не ошибаюсь, как раз taste_id. :foreing_key указывает наименование ключа в текущей таблице, а мне помимо этого надо установить другой ключ в `tastes`.
Это ведь глобальная настройка для всех таблиц, а у меня далеко не все многоязычные. Или вы предлагаете передавать моделям какой-нибудь параметр 'lang' и уже в зависимости от него выставлять self.table_name?
Сам всегда так делаю. Но здесь надо будет проводить автоматические обновления и проще это делать с БД.
Что взамен? |
||||||||
|
|||||||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
Не в текущей, а в той которой внешний ключ, т.е. в данном случае в `tastes`.
Модели не зачем этим напрягать, тут роуты отлично справятся с тем, какой язык нужен на запрашиваемой странице... Выставлять имена таблиц не нужно, это происходит прозрачно для модели, при назначении префикса... -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
shine |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 137 Регистрация: 20.10.2006 Репутация: нет Всего: 5 |
У тебя уже есть в таблице tastes поле id. Именно оно и должно быть уникальным идентификатором объекта. Рельсы именно так и связывают: wines.taste_id = taste.id --------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin |
||||
|
|||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
Рельсы связывают так как им скажешь, а то что ты написал, это лишь соглашение по конфигурации, которое применяется по умолчанию...
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
shine |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 137 Регистрация: 20.10.2006 Репутация: нет Всего: 5 |
... выкушено автором после размышлений по теме ...
Это сообщение отредактировал(а) shine - 29.4.2008, 22:50 --------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin |
|||
|
||||
BobiKK |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 655 Регистрация: 1.12.2005 Где: Essen, Deutschlan d Репутация: нет Всего: 16 |
По рельсовой логике - да. Но у меня получается некое подобие составного ключа из полей taste_id и language_id
Почему-то я всегда считал, что в belongs_to как раз и есть внешний ключ. И почему-то у меня это до сих пор работало
А можно хотя бы намек, что гуглить? Как сделать параметры текущего языка в руотингах кое-как понятно, но вот как это связать с моделями - теряюсь в догадках |
||||||
|
|||||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
Что там гуглить, вся дока вместе с рельсами устанавливается RDoc называется...
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
BobiKK |
|
|||
Опытный Профиль Группа: Участник Сообщений: 655 Регистрация: 1.12.2005 Где: Essen, Deutschlan d Репутация: нет Всего: 16 |
Что ж, спасибо всем за помощь, вроде кое-как разобрался.
P.S. А документация у рельсов неудобная. По крайней мере у ZF на порядок лучше |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Ruby: Базы данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |