Запуск 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 %>