Вложенные ассоциации, как подготовить переменные для представлений, рельсы

Запуск Rails 3.1.3 ...

Я буду использовать простой пример вложенных ассоциаций (не уверен, что это правильный термин). В основном я моделирую базы данных - каждая база данных имеет свои собственные таблицы, и каждая таблица имеет свои собственные столбцы:

class Database < ActiveRecord::Base
  has_many :tables
end

class Table < ActiveRecord::Base
  belongs_to :database
  has_many :columns
end

class Column < ActiveRecord::Base
  belongs_to :table
end

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

Я придумал следующее, но я был бы удивлен, если бы не нашел лучшего способа сделать это:

Мой контроллер:

class DatabasesController < ApplicationController
  def show
    @database = Database.find_by_id(params[:id])
    @tables = @database.tables
    @columns = @database.tables.columns
  end
end

Мой view:

Database: <%= @database.database_name %><br />
<% @tables.each do |table| %>
  Table: <%= table.table_name %><br />
  <% table.columns.each do |column| %>
    Column: <%= column.column_name %><br />
  <% end %>
<% end %>

Я также пробовал использовать это в контроллере:

@database = Database.where(:id => params[:id]).includes(:tables => [:columns])

Однако попытка получить доступ к именам таблиц и столбцов из @database свела меня с ума.


ОБНОВЛЕНИЕ:

Обычно я тратил много часов, пытаясь понять это, и вскоре после публикации здесь, я думаю, что понял. Спасибо за подсказку - у меня это сработало. Кроме того, если я изменю свой собственный метод, используя первый! метод работает следующим образом:

Контроллер:

def show
  @database = Database.where(:id => params[:id]).includes(:tables => [:columns]).first!
end

Просмотр:

Database: <%= @database.database_name %><br />
<% @database.tables.each do |table| %>
  Table: <%= table.table_name %><br />
  <% table.columns.each do |column| %>
    Column: <%= column.column_name %><br />
  <% end %>
<% end %>
7
задан DavB 3 February 2012 в 14:52
поделиться