Сложные отношения в Ruby - отображать данные во многих таблицах - PullRequest
0 голосов
/ 23 апреля 2009

Я разработал приложение, состоящее из 20+ таблиц и использующее Ruby on Rails. Я использую систему аутентификации для пользователей, чтобы войти. Я хочу отобразить пользователю, когда он входит в систему, информацию, связанную с ним, которая может быть найдена во многих таблицах, между этими таблицами есть все возможные отношения. Как я могу сделать это в RoR? Должен ли я рассмотреть возможность использования представлений, нескольких объединений? Мне не удалось получить информацию из одной модели, кроме двух таблиц, которые рассматривали дизайн таблиц с использованием классических подходов типа «имеет много», «через» и т. Д.

Не могли бы вы поделиться своими знаниями?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 апреля 2009

Я думаю, что ваш вопрос слишком общий, но вот некоторые мысли ... при условии, что вы создаете обычное приложение Rails

«Должен ли я рассмотреть возможность использования представлений?»

Представления - это то, что пользователи видят в обычных приложениях rails. Поэтому, если вы хотите отображать данные для своих пользователей, используйте представления для отображения данных, доступных в контроллерах. Каждое действие в контроллере будет получать данные из моделей и иметь соответствующий вид.

Таким образом, для отображения книг, принадлежащих пользователю, у вас может быть контроллер Books. После того, как пользователь войдет в систему, у вас будет действие «index» в контроллере «Books», которое говорит: @user_books = @ user.books. В этом случае @user будет объектом пользователя вашей системы аутентификации. У пользователя будет много книг, и вполне возможно, что у книги будет много пользователей. Затем в вашем файле views / books / index.html.erb есть что-то вроде:

<ul>
<% @user_books.each do |b| %>
  <li> <%= b.name %> </li>
<% end %>
</ul>

для распечатки списка названий книг.

Объединения выполняются Rails автоматически, поэтому вам пока не нужно об этом беспокоиться. Но если ваше приложение становится действительно большим, а запросы сложными, вам, возможно, придется переписать операторы SQL, чтобы улучшить масштабируемость ... но это, очевидно, хорошая проблема.

Надеюсь, это поможет!

0 голосов
/ 23 апреля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...