2015-04-03 2 views
1

У меня есть проект с использованием Rails, где я хотел бы иметь несколько таблиц SQLite, связанных с одним контроллером. Я огляделся и ничего не видел об этом. Это возможно? Теперь у меня есть несколько контроллеров, но я бы хотел попытаться их консолидировать.Наличие нескольких таблиц базы данных для одного контроллера в Rails

+1

В Rails Controllers не имеет ничего общего с таблицами db, вам нужно создать модель для каждой таблицы, а затем вы можете подключить их к одному контроллеру, скажем, DashboardController, любым способом для меня или любого другого, чтобы дать вам мы должны получить более подробную информацию о том, чего вы пытаетесь достичь здесь. –

+0

Каким-то образом я думаю, что это может загнать вас в путь. Почему вы чувствуете необходимость консолидации контроллеров? Если контроллеры могут быть консолидированы, можно ли консолидировать таблицы? Может быть, это проблема? – Beartech

ответ

3

Ruby on Rails использует парадигму MVC. Это означает, что очень просто объяснить, что модели (M) отвечают за хранение и извлечение данных, представления (V) предназначены для отображения, а контроллеры (C) принимают и отправляют запросы.

Простой пример: пользователь отправляет запрос на отображение страницы. Контроллер принимает этот запрос. Если есть данные из базы данных, необходимой для отображения на странице, контроллер запрашивает соответствующую модель. Модель берет эти данные из базы данных, отправляет их контроллеру, который затем отправляет его в представление.

Если в вашем примере данные хранятся в разных таблицах базы данных, контроллер отвечает за их связанные модели.

Например, у вас есть таблица базы данных, называемая проектами, а другая называется задачами и третьими пользователями, чем у вас должны быть три модели: модель проекта, модель задачи и модель пользователя. Каждая модель отвечает за таблицу базы данных.

Возможно, у вас есть представление (он будет генерировать html-страницу), где вы хотите отображать данные из всех трех таблиц. Назовем его show.html.

Следуя за соглашением Rails, у вас есть соответствующее действие «show» в вашем контроллере. Вы должны сказать это действие, какие данные вам нужны для представления.

class YourAwesomeController < ApplicationController 

    def show 
    @project = Project.find(1) 
    @task = Task.find(21) 
    @user = User.find(42) 
    end 
    ... # some other actions 

end 

Это означает, что ваше действие «шоу» в вашем контроллере «YourAwesomeController» задает модель проекта, чтобы выбрать строку из таблицы "проектов с идентификатором = 1, то модель Такс, чтобы выбрать строку из таблицы «tasks» с идентификатором id = 21 и, наконец, он хочет, чтобы модель User выбрала строку с id = 42 из «пользователей» таблицы.

Примечание: Контроллер не знает, где хранятся необходимые данные. Он знает (через ваш код) модели (возможно, что данные пользователя хранятся во внешнем веб-сервисе. Если это так, модель знает это, и контроллер не против, потому что он просто просит модель отправить его данные, которые ему нужны)

В вашем show.html.erb вы можете использовать теперь переменные экземпляра @project, @task и @user для отображения данных.

Ruby on Rails показывает свою полную мощность и магию, если следовать правилам. Однако, даже если вы не используете Rails, всегда рекомендуется следовать парадигме MVC.